您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

依赖项属性收到XAML更改时的回调

依赖项属性收到XAML更改时的回调

您将必须使用属性元数据注册PropertyChangedCallback

原因是在XAML中,通过绑定或其他来源设置的依赖项属性不会调用CLR包装器(setter方法)。MSDN上的XAML加载和依赖项属性文章中对此原因进行了说明:

出于实现的原因,将属性标识为依赖项属性并访问属性系统的SetValue方法以对其进行设置比使用属性包装器及其设置器要便宜得多。

因为针对属性设置的XAML处理器行为的当前WPF实现完全绕过了包装,所以您不应为自定义依赖项属性在包装的集合定义中添加任何其他逻辑。如果将这样的逻辑放在集合定义中,则当在XAML中而不是在代码中设置属性时,将不会执行该逻辑。

您的代码应如下所示:

public static readonly DependencyProperty IsClosedProperty =
    DependencyProperty.Register(
        "IsClosed", typeof(bool), typeof(Group@R_208_2419@),
        new FrameworkPropertyMetadata(false,
            FrameworkPropertyMetadataOptions.AffectsRender,
            (o, e) => ((Group@R_208_2419@)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);
}
其他 2022/1/1 18:15:27 有537人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶