我在WPF应用程序中有组合框,当用户点击它时,它会选择所有文本。如何在用户点击它时将其行为更改为仅将键入光标设置为普通文本框?
答案 0 :(得分:1)
尝试
<ComboBox IsEditable="True" />
答案 1 :(得分:0)
根据Reflector,ComboBox
代码包含:
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(); // <==
}
}
}
使用GotFocus
在静态构造函数中为EventManager
事件注册此方法:
EventManager.RegisterClassHandler(typeof(ComboBox), UIElement.GotFocusEvent, new RoutedEventHandler(ComboBox.OnGotFocus));
所以,我认为你只能通过从ComboBox
派生自定义控件来改变这种行为,并用你自己的方法覆盖这个事件注册,用另一个设置插入符号的方法替换对SelectAll()
的调用。到了正确的位置。但是,我不知道如何将插入符号设置为单击位置。您可能必须在TextBox上使用Reflector来查找...
答案 2 :(得分:0)
似乎我必须解决类似的问题。 这很棘手,但我解决的方法是从代码中将IsEditable设置为false / true,同时将焦点设置在TextBox上。
不是美妙的方式,而是完成工作。