C# WPF/Xaml上下文菜单项ContainerStyle行为

C# WPF/Xaml上下文菜单项ContainerStyle行为,c#,wpf,xaml,C#,Wpf,Xaml,我的窗口的DataContext是IDictionary> 有谁能向我解释一下为什么这样做很好: <Style x:Key="MenuItemStyle"> <Setter Property="MenuItem.Header" Value="{Binding Ticker}"/> </Style> <Style x:Key="ContextMenuStyle"> <Setter Property="MenuItem.Heade

我的窗口的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
,使其无法工作。有关更多详细信息,请参阅