我正在研究仪表控制。
当Size或Padding属性发生变化时,我需要重新绘制内部的所有内容。
这是我处理Size
属性更改的方式:
public RoundGauge()
{
this.SizeChanged += delegate
{
ReDrawEverything();
};
InitializeComponent();
}
但是没有PaddingChanged
事件。我该怎么办?
答案 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;
// ...
}
}
}