【问题标题】:AvalonDock - Bind MenuItem to State of DockableContentAvalonDock - 将 MenuItem 绑定到 DockableContent 的状态
【发布时间】:2010-07-06 00:26:19
【问题描述】:

我正在使用AvalonDock 来布局我的应用程序。

我想为我的每个 DockableContents 创建一个带有可检查 MenuItem 的“视图”菜单项,以显示/隐藏每个项目。

我没有找到任何人这样做的示例,在我看来,State 属性是只读的,因此无法创建到 MenuItem 的 2 路绑定。看起来您还必须调用方法来更改状态。

任何人有一个聪明的方法来做这个绑定?或者有没有我想念的简单方法。

【问题讨论】:

    标签: c# .net wpf binding avalondock


    【解决方案1】:

    一种可能的解决方案是使用附加属性。附加属性将调用必要的方法来更改状态。然后你可以绑定到那个。

    public static class ContentAttach
    {
        public static readonly DependencyProperty StateProperty = DependencyProperty.RegisterAttached(
            "State", typeof(DockableContentState), typeof(ContentAttach), new PropertyMetadata(StateChanged));
        public static void SetState(DockableContent element, DockableContentState value)
        {
            element.SetValue(StateProperty, value);
        }
        public static DockableContentState GetState(DockableContent element)
        {
            return (DockableContentState)element.GetValue(StateProperty);
        }
        private static void StateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var element = (DockableContent)d;
            var state = (DockableContentState)e.NewValue;
            switch (state)
            {
                // Call methods in here to change State.
            }
        }
    }
    

    【讨论】:

    • 好的开始。您如何从这个静态类中获得对指定 Avalon DockableContent 的引用?而且我必须以某种方式使其成为双向,所以我必须在 DockableContent 上注册一个事件并更改附加 DP 的值。
    • 在示例代码中,指定的 DockableContent 是 StateChanged 中的 'element' 变量。
    • 对不起,我以为你会在 MenuItem 上设置这个属性,但你真的只是绑定到 DockableContent 的属性,它会被传入。我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多