【转】【译】在 Windows 十 应用程序中注册任意依赖属性的改变

【转】【译】在 Windows 10 应用程序中注册任意依赖属性的改变

原文地址:http://visuallylocated.com/post/2015/04/01/Registering-to-any-DependencyProperty-changing-in-Windows-Apps.aspx

 

仍然有许多证明指出,在 Windows Runtime 的 XAML 里,缺失了很多 WPF 里的特性。其中一项是在 WPF 中,可以在依赖属性发生改变时获取到通知(链接)。现在,得益于 DependencyObject 类的 RegisterPropertyChangedCallback 这个新方法(链接),这项功能能够在 Windows 应用程序上实现了。这将为我们打开一个充满机会的新世界。当我们创建自定义控件或者对现有控件进行包装的时候,这项功能显得十分的有用。

与其去深入一些复杂的东西,我更倾向于使用一个快速的例子。一个拥有文本的文本框,但是没有办法在文本发生改变时得到通知。当然,我们也可以使用数据绑定,绑定到 Text 属性上,但是,现在请先忽略它。

现在,我们创建两个文本框和一个按钮。

<StackPanel>
    <TextBlock x:Name="CounterText"/>
    <Button Content="Click me" Click="OnButtonClicked"/>
    <TextBlock x:Name="DuplicateTextBlock"/>
</StackPanel>

当这个按钮被点击的时候,我们将设置第一个文本框的文本。

private int _counter;
 
private void OnButtonClicked(object sender, RoutedEventArgs e)
{
    CounterText.Text = string.Format("Clicked {0} times", ++_counter);
}

同时,我们也为 CounterText 这个文本框注册一个 Text 属性变化的回调函数。在回调函数里,我们将设置另一个文本框的文本。

public MainPage()
{
    this.InitializeComponent();
 
    CounterText.RegisterPropertyChangedCallback(TextBlock.TextProperty, OnTextChanged);
}
 
private void OnTextChanged(DependencyObject sender, DependencyProperty dp)
{
    var t = (TextBlock)sender;
 
    DuplicateTextBlock.Text = t.Text;
}

现在,你每一次点击按钮,都会设置第一个文本框的文本,并且回调函数将会触发并设置第二个文本框的文本!

【转】【译】在 Windows 十 应用程序中注册任意依赖属性的改变