继承UserControl并连接到基本属性事件

时间:2017-01-24 09:39:22

标签: xaml uwp uwp-xaml

我正在为UWP制作一个自定义TextBox来简化Win2D概述文本解决方案,为此我创建了一个UserControl,其中只包含一个画布,我将在其上绘制文本。

当然我需要一些属性,比如文字,轮廓粗细和颜色等等...... 我还需要一些已经由继承的UserControl公开的属性,如Foreground,FontSize,FontFamily ...... 到目前为止一切顺利,似乎我不需要实现这些常见属性中的每一个。

问题在于,当其中一个属性发生更改时,我找不到挂钩事件的方法,因为我必须调用Canvas.Invalidate()方法在格式更改时重绘它。

看起来我必须隐藏所有这些属性并创建新的依赖属性来调用Canvas.Invalidate()。 没有办法更快地完成它?

1 个答案:

答案 0 :(得分:0)

没关系,答案就在幕后。

在构造函数中,您可以调用

RegisterPropertyChangedCallback(DependencyProperty dp, DependencyPropertyChangedCallback callback);

例如:

public OutlinedText()
{
    InitializeComponent();

    RegisterPropertyChangedCallback(FontFamilyProperty, OnPropertyChanged);
        RegisterPropertyChangedCallback(FontSizeProperty, OnPropertyChanged);
}

private void OnPropertyChanged(DependencyObject sender, DependencyProperty dp)
{
    OutlinedText instance = sender as OutlinedText;
    if (instance != null)
    {
        //Caching the value into CanvasTextFormat for faster drawn execution
        if (dp == FontFamilyProperty)
            instance.TextFormat.FontFamily = instance.FontFamily.Source;
        else if (dp == FontSizeProperty)
            instance.TextFormat.FontSize = (Single)instance.FontSize;

        instance.needsResourceRecreation = true;
        instance.canvas.Invalidate();
    }
}