2

我的窗口的 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}"',它工作正常。但是,我不清楚为什么。

谢谢

4

1 回答 1

2

您需要将TargetTypefrom的值更改ContextMenuMenuItem。的ItemContainerStyle属性ContextMenu将样式设置为您的容器元素ContextMenu,在本例中为MenuItem. 但是,您将样式的目标类型设置为ContextMenu使其无法工作。有关更多详细信息,请参阅此链接

于 2012-05-22T01:54:03.700 回答