在我的主窗口中,我有一个包含文本框的子控件(用户控件)。如何在main(父)窗口中处理子控件文本框的textchange事件。
请提供一些代码示例,因为我不熟悉事件路由。
答案 0 :(得分:10)
您应该能够从父控件挂钩事件。但由于您的父控件没有自己的TextChanged
事件,因此您需要使用附加属性语法:
<Window ...
TextBox.TextChanged="ChildTextBoxChanged">
并在你的代码隐藏中:
private void ChildTextBoxChanged(object sender, TextChangedEventArgs args)
{
...
}
您不必专门将TextBox.TextChanged=
放在Window
上 - 只是TextBox
的父级控件,即任何属于您{的父级的控件{1}}。该事件将依次向每个父级冒泡,一直到顶级UserControl
,并且可以在整个过程中随处理。
(请注意,如果有人挂钩事件并设置Window
,则事件不会超过该点。有用的是知道您是否有多个级别的处理程序。)
答案 1 :(得分:1)
<StackPanel TextBoxBase.TextChanged="test_TextChanged" Name="test">
<userControl/>
</StackPanel>
答案 2 :(得分:0)
在您的childcontrol中创建一个事件 -
public event TextChangedEventHandler TextChanged;
现在为childcontrol中的TextBox的TextChanged事件添加一个处理程序 -
private void TextBox_TextChanged(object sender, TextChangedEventArgs args)
{
if (TextChanged != null)
{
TextChanged.Invoke(this, args);
}
}
还为此处理程序更新XAML -
<TextBox ... TextChanged="TextBox_TextChanged" ... />
现在,您已在childcontrol中创建了一个事件,该事件在Textbox的textchanged触发时触发。
现在您只需在mainwindow中为此事件添加处理程序 -
private void ChildControl_TextChanged(object sender, TextChangedEventArgs args)
{
//TODO: Add your further code here.
}