我有一个标记为TextBox
的客户用户控件(Border
包裹着Label
和TextBox
,其中TextBox
与标签重叠。我发现很少(工作)示例如何从我的UserControl调用TextChanged
函数。
只是文本框片段:
<TextBox
FontSize="{Binding Path=DefaultFontSize}"
Style="{StaticResource WatermarkTextBox}"
Padding="{Binding Path=TextPadding}"
Tag="{Binding Path=TextValue}"
/>
我尝试使用RoutedEventHandler
,就像我使用按钮的Click事件一样,但它没有用。如果让我说我在窗口上使用它是必需的,我该怎么做呢:
<MyControl:LabeledTextBox
TextBoxChange="Some_Event"
TextValue="{Binding SomethingOrOther}"
/>
它将正确启动并执行所需的功能
答案 0 :(得分:3)
这个问题真的不清楚。您是否希望用户控件支持TextChanged
中TextBox
中的文字发生变化时引发的public event TextChangedEventHandler TextChanged;
事件?如果是这样,您需要在代码隐藏中实现它。
首先,宣布事件:
TextBox
然后,将事件处理程序添加到<TextBox TextChanged="TextBox_TextChanged" ... />
:
private void TextBox_TextChanged(object sender, TextChangedEventArgs args)
{
TextChangedEventHandler h = TextChanged;
if (h != null)
{
h(this, args);
}
}
并在代码隐藏中:
{{1}}
答案 1 :(得分:2)
如果您正在使用MVVM(或者如果您的TextValue
绑定绑定到您可以访问和编辑的内容),您可以将要执行的逻辑放在setter中。
因此,假设您绑定了一个属性MyTextBoxValue
。在XAML中将绑定模式设置为双向,并在setter中放置逻辑或调用另一个方法。
如果您希望每次键入时都触发代码,请在XAML中设置UpdateSourceTrigger=PropertyChanged
,如果您希望仅在文本输入设置为{完成时设置UpdateSourceTrigger=LostFocus
时触发代码。