В WPF, есть ли способ объединить два стиля для одного элемента управления? - PullRequest
6 голосов
/ 11 июня 2011

Моя ситуация похожа на следующую.

У меня есть App.xaml, который включает в себя стиль для ListView следующим образом:

<Style x:Key="{x:Type ListViewItem}" TargetType="ListViewItem">
    <Setter Property="SnapsToDevicePixels" Value="true"/>
    <Setter Property="OverridesDefaultStyle" Value="true"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
              ...

Однако я хочу добавить некоторые стили в другой xaml, скажем, в Window.xaml, например:

 <ListView AlternationCount="2" Background="#FFECECEC">
    <ListView.Resources>
        <Style x:Key="{x:Type ListViewItem}" TargetType="{x:Type ListViewItem}">
            <EventSetter Event="PreviewMouseDoubleClick" Handler="OnPreviewMouseDoubleClick" />
        </Style>
    </ListView.Resources>
 </ListView>

Итак, я хочу определить стиль базового дизайна в App.xaml как стиль по умолчанию. Затем добавьте некоторые изменения, такие как добавление контекстного меню, добавление событий из каждого xaml.

Но в вышеописанной реализации стиль, определенный в App.xaml, будет перезаписан стилем, определенным в Window.xaml.

Есть ли способ решить проблему и достичь ее?

Ответы [ 2 ]

9 голосов
/ 11 июня 2011

Стили имеют свойство BasedOn:

<Style x:Key="Style1">
...
</Style>

<Style x:Key="Style2" BasedOn="{StaticResource Style1}">
...
</Style>

Кстати: <Style x:Key="{x:Type ListViewItem}" кажется немного странным. x:Key должен быть уникальным ключом в словаре xaml - обычно это строка.

2 голосов
/ 28 июня 2012

Если атрибут BasedOn соответствует вашим потребностям, это лучший выбор. Для более сложных сценариев, например, решение, упомянутое в этом вопросе , является более гибким.

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