在 XAML 中处理依赖属性更改的回调
在运行时为依赖属性设置值时,相应的 OnPropertyChanged
方法会立即被调用。但是,当设计器通过 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())); public bool IsClosed { get { return (bool)GetValue(IsClosedProperty); } set { SetValue(IsClosedProperty, value); } } private void OnIsClosedChanged() { _rowDefContent.Height = new GridLength((IsClosed ? 0 : 1), GridUnitType.Star); }</code>
这种方法确保 OnIsClosedChanged
方法在修改 IsClosed
属性值时执行,无论来源是 XAML、绑定等。
以上是如何触发从XAML更改依赖项属性上的回调?的详细内容。更多信息请关注PHP中文网其他相关文章!