c# - WPF/Xaml ContextMenu ItemContainerStyle 行为

标签 c# wpf xaml

我的窗口的 DataContext 是一个 IDictionary>。

任何人都可以向我解释为什么这工作正常:

<Style x:Key="MenuItemStyle">
    <Setter Property="MenuItem.Header" Value="{Binding Ticker}"/>
</Style>
<Style x:Key="ContextMenuStyle">
    <Setter Property="MenuItem.Header" Value="{Binding Key}"/>
    <Setter Property="MenuItem.ItemsSource" Value="{Binding Value}"/>
    <Setter Property="MenuItem.ItemContainerStyle" Value="{StaticResource MenuItemStyle}"/>
</Style>
<ContextMenu ItemContainerStyle="{StaticResource ContextMenuStyle}" ItemsSource="{Binding Quotes}" />

但这不是:

<Style TargetType="{x:Type ContextMenu}" x:Key="ContextMenuStyle">
    <Setter Property="MenuItem.Header" Value="{Binding Key}"/>
    <Setter Property="MenuItem.ItemsSource" Value="{Binding Value}"/>
    <Setter Property="MenuItem.ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="{x:Type MenuItem}">
                <Setter Property="Header" Value="{Binding Ticker}"/>
            </Style>
        </Setter.Value>
    </Setter>
</Style>
<ContextMenu ItemContainerStyle="{StaticResource ContextMenuStyle}" ItemsSource="{Binding Quotes}" />

编辑:如果我删除 T'argetType="{x:Type ContextMenu}"',它工作正常。但是我不清楚为什么。

谢谢

最佳答案

您需要将 TargetType 的值从 ContextMenu 更改为 MenuItemContextMenuItemContainerStyle 属性将样式设置为 ContextMenu 的容器元素,在本例中为 MenuItem .但是,您将样式的目标类型设置为 ContextMenu,因此它无法工作。参见 this link了解更多详情。

关于c# - WPF/Xaml ContextMenu ItemContainerStyle 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694375/

相关文章:

c# - 将 Enumerable.Range 转换为字符串列表

c# - 如何检查(通用)数字类型是 C# 中的整数类型还是非整数类型?

wpf - 路径与几何图形

c# - WPF 事件的最佳模式是什么?

wpf - 使用 ItemTemplate 在 ListBoxItems 构建上添加事件

WPF:将一个组件的高度绑定(bind)到另一个组件的高度

c# - WebRequest.GetResponse().GetResponseStream() 可以在没有 WebException 的情况下返回 null 吗?

c# - Visual Studio 2013 - 源代码不可用

wpf - 扩展器为ListBoxItem不会触发选择

wpf - 如何隐藏工具栏右侧的箭头?