Как изменить стиль элемента управления только для одной части моего приложения в WPF, если тип элемента управления имеет глобальный стиль? - PullRequest
0 голосов
/ 15 июня 2011

Я стилизовал свои элементы управления Menu / ContextMenu / MenuItem в App.xaml, чтобы эти стили применялись ко всему моему приложению.

определяется следующим образом (например, с помощью MenuItem):

<Style TargetType="{x:Type MenuItem}">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="True"/>
    <!-- more setters -->
</Style>

это прекрасно работает.

Теперь, в какой-то момент у меня есть RichTextBox, и я бы хотел, чтобы его ContextMenu и MenuItems имели другой стиль.

Итак, я написал:

<RichTextBox>

    <RichTextBox.ContextMenu>
        <ContextMenu>
            <MenuItem Command="Undo" Style="{StaticResource menuItem}">Toto</MenuItem>
            <MenuItem Command="Redo"/>
            <Separator/>
            <MenuItem Command="Cut"/>
            <MenuItem Command="Copy"/>
            <MenuItem Command="Paste"/>
            <MenuItem Command="SelectAll"/>
        </ContextMenu>
    </RichTextBox.ContextMenu>

    <!-- and here the RichTextBox's conent -->

</RichTextBox>

и сейчас я пытаюсь выяснить, куда я могу поместить свой новый стиль ... Проблема в том, что я не могу понять: неважно, где и как я его добавляю (статический ресурс на RichTextBox или на ContextMenu, с явным ключом или просто targetType), я не могу избавиться от своего «глобального» стиля. А местный просто игнорируется.

как я могу продолжить?

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Попробуйте:

        <RichTextBox.Resources>
            <Style x:Key="menuItem"  TargetType="{x:Type MenuItem}">
                <Setter Property="Foreground" Value="Blue"/>
            </Style>
        </RichTextBox.Resources>
0 голосов
/ 01 августа 2011

В конце концов, я остановился на ресурсах ContextMenu, и это даже спасает меня «Стиль = ...» в каждом пункте меню.

<RichTextBox.ContextMenu>
    <ContextMenu>

        <ContextMenu.Resources>
            <Style TargetType="{x:Type MenuItem}">
                <Setter Property="SnapsToDevicePixels" Value="true"/>
                <Setter Property="OverridesDefaultStyle" Value="True"/>

                <Setter Property="Background" Value="{StaticResource MenuItemBackgroundBrush}"/>
            </Style>
        </ContextMenu.Resources>

    </ContextMenu>
</RichTextBox.ContextMenu>

Я думаю, что он у меня был с самого начала, нопочему-то забыл OverridesDefaultStyle = true, который, казалось, был проблемой.(хотя из того, что я понял из документации MS, в моем случае это не должно было иметь никакого значения ... Я должен попытаться понять, что я там пропустил)

...