我想在一個開源應用程序中進行自定義控件的更改。擴展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