Как переопределить ContextMenu в глобальном стиле? - PullRequest
0 голосов
/ 14 марта 2011

Я объявляю 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 голосов
/ 14 марта 2011

Если вы явно установите свойство 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...