0

我创建了一个带有许多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事件。

4

0 回答 0