WPF - Стиль смешивания, определенный в словаре, со стилем, определенным в родительском элементе управления - PullRequest
5 голосов
/ 23 сентября 2010

Я определяю пользовательский вид для элемента управления Button в словаре ресурсов:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Style TargetType="Button" x:Key="BaseButtonStyle">
    <Setter Property="Background" Value="Blue"/>
  </Style>
</ResourceDictionary>

Затем я пытаюсь изменить стиль в окне, где расположены кнопки.

<Window.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="Dictionary.xaml"/>
      <ResourceDictionary>
        <Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
          <Setter Property="Foreground" Value="Red"/>
        </Style>
      </ResourceDictionary>
      </ResourceDictionary.MergedDictionaries>   
    </ResourceDictionary>
</Window.Resources>

В конструкторе WPFУ меня есть то, что я ожидал.Синяя кнопка с красным текстом.Но во время выполнения оба стиля не применяются, и кнопка имеет цвета по умолчанию.Как я могу это исправить?

1 Ответ

6 голосов
/ 23 сентября 2010

работает ниже. Я просто переместил стиль из MergedDictionaries и поместил его во внешний ResourceDictionary.

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </ResourceDictionary>
</Window.Resources>

В вашем исходном XAML я не уверен, почему дизайнер смог правильно его отобразить, а среда выполнения WPF - нет. Документация MSDN гласит, что:

Объединенный ResourceDictionary не имеет элементов ресурсов, определенных в нем в разметке. Вместо этого объединенный словарь представляет собой ResourceDictionary без определенных дочерних элементов разметки (или без добавления элементов через код), но с URI, указанным для Source. Возможно, это как-то связано.

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