我创建了一个带有许多DependencyProperty自定义属性的 WPF UserControl,这些属性都会影响 OnMeasure 和 call PropertyChangedCallback,例如:
private static readonly DependencyProperty ArrowStrokeThicknessProperty = DependencyProperty.Register("ArrowStrokeThickness", typeof(double), typeof(ProjectListTreePanel), new FrameworkPropertyMetadata(2d, FrameworkPropertyMetadataOptions.AffectsMeasure, PropertyChangedCallback), ValidateArrowStrokeThickness);
我宁愿将所有这些属性放入一个单独的DependencyObject:
internal class MyArrowProperties : DependencyObject
{
private static readonly DependencyProperty StrokeThicknessProperty = DependencyProperty.Register("StrokeThickness", typeof(double), typeof(MyArrowProperties), new FrameworkPropertyMetadata(2d, FrameworkPropertyMetadataOptions.AffectsMeasure, PropertyChangedCallback), ValidateStrokeThickness);
...
}
...并让它DependencyObject成为DependencyProperty我的一个UserControl:
public partial class ProjectListTreePanel : UserControl
{
private static readonly DependencyProperty ArrowProperty = DependencyProperty.Register("Arrow", typeof(MyArrowProperties), typeof(ProjectListTreePanel), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure, PropertyChangedCallback));
对属性的更改MyArrowProperties DependencyObject将自动转发到包含ProjectListTreePanel UserControl,因此MeasureOverride在 上被调用ProjectListTreePanel UserControl,例如,当我更新
MyProjectListTreePanel.Arrow.StrokeThickness = 2
?
或者我需要做什么才能将封装属性的更改转发到外部容器?
相似
这里描述的问题与Thickness结构类似。该Thickness结构是四个不同值的集合。当这些值中的任何一个发生变化时,Thickness结构都会引发一个OnPropertyChanged事件。