【问题标题】:How to override ContextMenu in global style?如何以全局样式覆盖 ContextMenu?
【发布时间】:2011-03-14 02:19:40
【问题描述】:

我在库中声明了我的控件的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>

【问题讨论】:

    标签: wpf contextmenu styles


    【解决方案1】:

    如果您在元素上显式设置 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 是相同的类/类型。

    【讨论】:

    • 哦,对不起。我在控件库中使用了第一个示例,但在应用程序中使用了第二个示例。
    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 2022-11-10
    • 2020-09-06
    • 2012-01-18
    • 1970-01-01
    • 2017-04-02
    • 2020-10-11
    • 2019-02-20
    相关资源
    最近更新 更多