Padding的用户控件和事件已更改

时间:2017-03-03 15:55:45

标签: wpf events user-controls

我正在研究仪表控制。

当Size或Padding属性发生变化时,我需要重新绘制内部的所有内容。

这是我处理Size属性更改的方式:

public RoundGauge()
{
    this.SizeChanged += delegate 
    { 
        ReDrawEverything(); 
    };
    InitializeComponent();
}

但是没有PaddingChanged事件。我该怎么办?

2 个答案:

答案 0 :(得分:1)

确实没有“PaddingChanged”事件,但您可以使用DependencyPropertyDescriptor订阅对依赖项属性的更改:

public partial class RoundGauge : UserControl
{
    public RoundGauge()
    {
        InitializeComponent();

        DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(PaddingProperty, typeof(UserControl));
        if (dpd != null)
            dpd.AddValueChanged(this, OnPaddingChanged);
    }

    private void OnPaddingChanged(object sender, EventArgs e)
    {
        MessageBox.Show("Padding changed!");
    }
}

有关详细信息,请参阅以下博文。

在视图中处理对依赖项属性的更改: https://blog.magnusmontin.net/2014/03/31/handling-changes-to-dependency-properties/

答案 1 :(得分:0)

您可以覆盖OnPropertyChanged事件:

public partial class RoundGauge : Control
{
    public RoundGauge()
    { 
    } 

    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        if (e.Property == PaddingProperty)
        {
            Thickness oldPadding = (Thickness)e.OldValue;
            Thickness newPadding = (Thickness)e.NewValue;
            // ...
        }
    }
}