【问题标题】:Menu item that sets properties on menu open在菜单打开时设置属性的菜单项
【发布时间】:2017-10-10 08:42:34
【问题描述】:

我目前正在尝试创建一个动态创建的上下文菜单。我目前正在将ObservableCollection<MenuItem> 绑定到上下文菜单上的ItemsSource 属性。我现在想根据我选择的内容设置菜单打开时列表中项目的可见性。
我试过像这样继承MenuItem

public class CtContextMenuItem : MenuItem
{
    public delegate Visibility VisibilityDelegate();
    public VisibilityDelegate IsVisibleDelegate = null;
}

我想在打开上下文菜单时将Visibility 设置为VisibilityDelegate 的结果,但我找不到在打开上下文菜单时在MenuItem 上调用的任何事件或方法 有没有办法做到这一点,还是我必须在监听ContextMenuOpening的函数内创建菜单的所有项目?

【问题讨论】:

  • “收听 ContextMenuOpening” - 是的。枚举菜单项并直接或通过属性调用该委托(如果使用数据模板绑定)。考虑添加一点mvvm,而不是使用自定义控件。

标签: c# wpf


【解决方案1】:

ItemsSource 绑定到ObservableCollection<CtContextMenuItem>,其中CtContextMenuItem 类型具有可以在XAML 中绑定的Visibilitybool 属性。像这样的:

public class CtContextMenuItem
{
    public Visibility IsVisible { get; set; }
}

<ContextMenu ItemsSource="{Binding TheSourceCollection}">
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Visibility" Value="{Binding IsVisible}" />
        </Style>
    </ContextMenu.ItemContainerStyle>
</ContextMenu>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2017-08-08
    • 2023-03-08
    相关资源
    最近更新 更多