我的窗口的 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
更改为 MenuItem
。 ContextMenu
的 ItemContainerStyle
属性将样式设置为 ContextMenu
的容器元素,在本例中为 MenuItem
.但是,您将样式的目标类型设置为 ContextMenu
,因此它无法工作。参见 this link了解更多详情。
关于c# - WPF/Xaml ContextMenu ItemContainerStyle 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694375/