为什么当我更改这些DependencyProperty值时,设计器没有更新?

本文关键字:更新 值时 DependencyProperty 为什么 | 更新日期: 2023-09-27 18:11:17

我扩展了这个带有StartPosition LayoutDirection依赖属性的RadialPanel示例:

public class RadialPanel : Panel
{
    public RadialPanel()
    {
        StartPosition = StartPosition.Top;
        LayoutDirection = LayoutDirection.Clockwise;
    }
    public StartPosition StartPosition
    {
        get { return (StartPosition)GetValue(StartPositionProperty); }
        set { SetValue(StartPositionProperty, value); }
    }
    public static readonly DependencyProperty StartPositionProperty =
        DependencyProperty.Register("StartPosition", typeof(StartPosition), typeof(RadialPanel), new PropertyMetadata(StartPosition.Top));

    public LayoutDirection LayoutDirection
    {
        get { return (LayoutDirection)GetValue(LayoutDirectionProperty); }
        set { SetValue(LayoutDirectionProperty, value); }
    }
    public static readonly DependencyProperty LayoutDirectionProperty =
        DependencyProperty.Register("LayoutDirection", typeof(LayoutDirection), typeof(RadialPanel), new PropertyMetadata(LayoutDirection.Clockwise));
// ... code from cited article
}

StartPositionLayoutDirection值为枚举值:

public enum StartPosition
{
    Left = 180, Top = 90, Right = 0, Bottom = -90
}
public enum LayoutDirection
{
    Clockwise = -1, CounterClockwise = 1
}

数学工作,当我构建项目时,一切都会刷新,但我认为使用依赖属性会在我更改XAML:

中的值时自动更新设计器。
<local:RadialPanel StartPosition="Top" 
                   LayoutDirection="CounterClockwise" >

…但事实并非如此。当我更改RadialPanel的Children时,它会更新,但仅此而已。

如何启用此功能?

为什么当我更改这些DependencyProperty值时,设计器没有更新?

默认情况下,WPF不会在每次属性更改后重新计算控件的布局。你需要告诉框架,给定的属性影响布局。

在两个属性上使用FrameworkPropertyMetadataFrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectArrange而不是PropertyMetadata,框架将在它们改变后运行Panel的测量/安排。