WPF 设计器中依赖属性 PropertyChanged 回调失效问题
在 WPF 中,依赖属性(例如 IsClosed)在运行时设置值时,其对应的 OnPropertyChanged 回调会被成功调用。然而,当在 XAML 中通过设计器修改属性值时,此回调却不会触发,导致任何相关的逻辑都无法生效。
根本原因在于 XAML 加载过程中的优化,它直接使用属性系统的 SetValue 方法,绕过了属性包装器。这确保了计算效率,但也需要针对非运行时修改采用替代方法。
为了解决这个问题,需要在属性元数据中注册一个 PropertyChangedCallback:
<code class="language-csharp">public static readonly DependencyProperty IsClosedProperty = DependencyProperty.Register( "IsClosed", typeof(bool), typeof(GroupBox), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender, (o, e) => ((GroupBox)o).OnIsClosedChanged()));</code>
通过附加此回调,无论 IsClosed 属性是通过 XAML 还是代码更改,OnIsClosedChanged() 方法都将按预期执行。
以上是为什么我的WPF依赖性属性不在设计师中的属性换回电?的详细内容。更多信息请关注PHP中文网其他相关文章!