Reputation: 2766
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
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
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