pk_code
pk_code

Reputation: 2766

Set Cursor Focus into Editable Combobox in WPF C#

I have editable combobox in WPF and I want to set focus from C#,

I am using Combobox.Focus(), but it shows only selection but I want edit option where user can start entering.

Update : Figured out FIX

I ended up adding 'Loaded' Event to the Combobox and Wrote following Code to get focus in and it worked Fine

    private void LocationComboBox_Loaded(object sender, RoutedEventArgs e)
    {
        ComboBox cmBox = (System.Windows.Controls.ComboBox)sender;
        var textBox = (cmBox.Template.FindName("PART_EditableTextBox",  
                       cmBox) as TextBox);
        if (textBox != null)
        {
            textBox.Focus();
            textBox.SelectionStart = textBox.Text.Length;
        }


    }

Upvotes: 4

Views: 4940

Answers (3)

PRAFUL
PRAFUL

Reputation: 25

Have a look at this. It might help you

Click WPF Editable ComboBox

Upvotes: 0

Aloraman
Aloraman

Reputation: 1420

If I understand you correctly, you have following situation: you set focus to ComboBox and observe selected text inside editable area, but you want it to be empty with only blinking caret inside. If so, you can do it this way:

ComboBox.Focus();
ComboBox.Text = String.Empty;

Upvotes: 2

Abin
Abin

Reputation: 2956

Try Creating a Focus Extension like below, and set the attached property to the text box and bind it.

public static class FocusExtension
{
    public static bool GetIsFocused(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsFocusedProperty);
    }


    public static void SetIsFocused(DependencyObject obj, bool value)
    {
        obj.SetValue(IsFocusedProperty, value);
    }


    public static readonly DependencyProperty IsFocusedProperty =
        DependencyProperty.RegisterAttached(
         "IsFocused", typeof(bool), typeof(FocusExtension),
         new UIPropertyMetadata(false, OnIsFocusedPropertyChanged));


    private static void OnIsFocusedPropertyChanged(DependencyObject d,
        DependencyPropertyChangedEventArgs e)
    {
        var uie = (UIElement)d;
        if ((bool)e.NewValue)
        {
            OnLostFocus(uie, null);
            uie.Focus();
        }
    }

    private static void OnLostFocus(object sender, RoutedEventArgs e)
    {
        if (sender != null && sender is UIElement)
        {
            (sender as UIElement).SetValue(IsFocusedProperty, false);
        }
    }
}

XAML

 <TextBox Extension:FocusExtension.IsFocused="{Binding IsProviderSearchFocused}"/>

Upvotes: 3

Related Questions