如何从可编辑的ComboBox中获取TextChanged事件

时间:2011-08-02 15:59:10

标签: wpf

我有一个可编辑的ComboBox:

<ComboBox IsEditable="true"/>

更改编辑值时引发的事件是什么?我尝试过TextInput,但这不是解决方案。

5 个答案:

答案 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" />