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