为什么当我更改这些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
}
StartPosition
和LayoutDirection
值为枚举值:
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时,它会更新,但仅此而已。
如何启用此功能?
默认情况下,WPF不会在每次属性更改后重新计算控件的布局。你需要告诉框架,给定的属性影响布局。
在两个属性上使用FrameworkPropertyMetadata
和FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectArrange
而不是PropertyMetadata
,框架将在它们改变后运行Panel
的测量/安排。