如何在全局样式中覆盖ContextMenu?

时间:2011-03-14 02:19:40

标签: wpf contextmenu styles

我在库中声明了我的控件的style

<ContentControl.Resources>
    <ContextMenu x:Key="ContextMenu">
        <MenuItem Header="{x:Static Drawing:Headers.AddEdge}"  Click="AddEdgeClick"/>
        <MenuItem Header="{x:Static Drawing:Headers.ChangeID}" Click="ChangeIDClick"/>
        <MenuItem Header="{x:Static Drawing:Headers.Remove}"   Click="RemoveClick"/>
    </ContextMenu>
    <Style x:Key="Style" TargetType="{x:Type Drawing:Node}">
        <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
    </Style>
</ContentControl.Resources>

<ContentControl.Style>
    <StaticResource ResourceKey="Style"/>
</ContentControl.Style>

但应用程序中此控件的全局样式不起作用......

<Style TargetType="Drawing:Node">
    <Setter Property="ContextMenu" Value="{x:Null}"/>
    <EventSetter Event="MouseLeftButtonUp" Handler="DirectoryClicked"/>
</Style>

1 个答案:

答案 0 :(得分:0)

如果在元素上显式设置Style属性,则不会应用任何隐式样式(即您的全局样式)。如果您的全局样式实际上是默认样式,那么它仍应该应用,但它听起来并不像您正在做的那样。

您可以将显式样式基于隐式样式,如下所示:

<Style x:Key="Style" TargetType="{x:Type Drawing:Node}" BasedOn="{StaticResource {x:Type Drawing:Node}}">
    <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
</Style>

当然,假设Drawing:Node与GraphNode:Node。

是相同的类/类型