0

我有一个带有标签的客户用户控件TextBoxBorder包裹在 aLabel和 aTextBox上,TextBox标签重叠)。我找到了几个(工作)示例,说明如何在TextChanged从我的 UserControl 调用该函数时使其工作。

只是文本框片段:

<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}"
 />

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

4

2 回答 2

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);
   }
}
于 2011-06-23T19:15:30.723 回答
2

如果您使用的是 MVVM(或者如果您的TextValue绑定绑定到您可以访问和编辑的内容),您可以将您想要执行的逻辑放在 setter 中。

因此,假设您正在绑定到一个 property MyTextBoxValue。在 XAML 中将绑定模式设置为两种方式,并在 setter 中放置逻辑或调用另一个方法。

如果您希望代码在每次键入时触发,请UpdateSourceTrigger=PropertyChanged在 XAML 中设置,如果您希望代码仅在文本输入为 "done" set 时触发UpdateSourceTrigger=LostFocus

于 2011-06-23T18:23:46.273 回答