使用TextBox的WPF UserControl,使用TextChanged事件C#

时间:2011-06-23 18:11:21

标签: wpf user-controls textbox textchanged

我有一个标记为TextBox的客户用户控件(Border包裹着LabelTextBox,其中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}"
 />

它将正确启动并执行所需的功能

2 个答案:

答案 0 :(得分:3)

这个问题真的不清楚。您是否希望用户控件支持TextChangedTextBox中的文字发生变化时引发的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时触发代码。