我想在一个开源应用程序中进行自定义控件的更改。扩展UserControl的自定义控件中的TextChanged或ContentChanged事件WPF
的XAML看起来是这样的:
<controls:Scratchpad Grid.Row="1" Grid.Column="2"
Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"/>
的便签控件的代码隐藏看起来是这样的:
public class Scratchpad : UserControl
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof (string), typeof (Scratchpad), new PropertyMetadata(default(string)));
public string Text
{
get { return (string) GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
}
我希望每次在用户控件的文本更改为触发事件处理程序。但是,我不能在XAML中使用TextChanged事件。
我的计划是做这样的事情:
<controls:Scratchpad Grid.Row="1" Grid.Column="2"
Text="{Binding DataContext.KeyboardOutputService.Text, RelativeSource={RelativeSource AncestorType=controls:KeyboardHost}, Mode=OneWay}"
textChanged="EventHandler"/>
然而,“框TextChanged”事件不会在这种自定义控件存在。如您所见,ScratchPad扩展了UserControl。 UserControl也扩展了ContentControl,这就是为什么我认为有可能把文本放在这个控件中,它们可能是我不知道的“ContentChanged”事件。
Best,Peter。
请参阅[如何创建自定义路由事件](https://msdn.microsoft.com/en-us/library/ms752288(v = vs.110).aspx),然后在您的自定义TextChangedEvent Text属性的PropertyChangedCallback(在Eric的答案中显示)。 – Clemens
或者声明一个普通的CLR事件并在PropertyChangedCallback中触发它。 – Clemens