开发者

Remove select all from combobox WPF

I have combobox in WPF application that when the user clicks on it, it selects all the text. How can I change the behavior of this to when the user clicks it just set the typing cursor like a normal 开发者_运维技巧textbox?


Try

<ComboBox IsEditable="True" />


According to Reflector, the ComboBox code contains this:

private static void OnGotFocus(object sender, RoutedEventArgs e)
{
    ComboBox box = (ComboBox) sender;
    if ((!e.Handled && box.IsEditable) && (box.EditableTextBoxSite != null))
    {
        if (e.OriginalSource == box)
        {
            box.EditableTextBoxSite.Focus();
            e.Handled = true;
        }
        else if (e.OriginalSource == box.EditableTextBoxSite)
        {
            box.EditableTextBoxSite.SelectAll(); // <==
        }
    }
}

This method is registered for the GotFocus event in the static constructor using the EventManager:

EventManager.RegisterClassHandler(typeof(ComboBox), UIElement.GotFocusEvent, new RoutedEventHandler(ComboBox.OnGotFocus));

So, I think you can only change that behavior by deriving a custom control from ComboBox and override this event registration by your own method which replaces the call to SelectAll() with another method which sets the caret to the correct position. However, I do not know how to set the caret to the click position. You might have to use Reflector on the TextBox to find that...


Seems that I had to solve similar issue. It's quite tricky, but the way I solved is to set IsEditable to false/true from code, at the same time I set the focus on TextBox.

Not the pretties way but does the job.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜