我有一个可编辑的ComboBox:
<ComboBox IsEditable="true"/>
更改编辑值时引发的事件是什么?我尝试过TextInput,但这不是解决方案。
答案 0 :(得分:111)
<ComboBox IsEditable="True" TextBoxBase.TextChanged="ComboBox_TextChanged" />
......应该这样做。 (假设你想要的东西会在每次对文本进行更改时触发,而不是在用户完成输入文本时。在这种情况下你需要另一个事件 - 可能是LostFocus事件或什么?)
无论如何,上述XAML的工作原理是,当IsEditable设置为true时,ComboBox使用TextBox来显示和编辑文本。 TextBox的TextChanged事件是bubbling event - 意味着它将在元素树中冒泡,因此我们可以在ComboBox本身上处理它。
唯一“棘手”的一点是,ComboBox本身不公开TextChanged事件,但你仍然可以使用attached event为它定义一个处理程序(因此使用TextBoxBase.TextChanged语法)。
(可能值得注意的是完整性,如果ComboBox碰巧包含多个TextBox,则只要其中任何一个文本发生更改,就会调用该处理程序。)
答案 1 :(得分:16)
基于上面的方法,我查看了(XAML)生成的代码。
<ComboBox x:Name="myComboBox" IsEditable="True"/>
将以下代码添加到初始化:
myComboBox.AddHandler(System.Windows.Controls.Primitives.TextBoxBase.TextChangedEvent,
new System.Windows.Controls.TextChangedEventHandler(ComboBox_TextChanged));
这对我来说很好,因为我需要一个可重用的ComboBox(SQL-Server下拉列表)来封装所有行为。
答案 2 :(得分:1)
添加--- >> TextBoxBase.TextChanged="ComboBox_TextChanged"
答案 3 :(得分:0)
ComboBox中的每个键盘输入都会触发PreviewTextInput事件。
答案 4 :(得分:0)
我想感谢IanR和Girish Reddyvari的回答,这让我开始思考。
我正在使用Caliburn Micro,并且试图在他们键入时获取Editable ComboBox的输入。 Caliburn Micro并不容易接起活动
TextBoxBase.TextChanged
因为我在xaml和交互性方面的背景还不够好!但是确实捡到了
KeyUp
我使用Caliburn Micro的代码有所不同,但以下代码也应工作
<ComboBox IsEditable="True" KeyUp="ComboBox_TextChanged" />