WPF Замена и расширение стилей - PullRequest
3 голосов
/ 27 июля 2011

Как мне изменить представление WPF о стиле по умолчанию для элемента управления? И почему это происходит в первую очередь? В приведенном ниже XAML я объявляю стиль для кнопки, а затем дополнительно объявляю новый стиль, который переопределяет один из сеттеров, называемый "HugeBut". Я ожидаю, что HugeBut неявно основан на моем новом безымянном стиле, но, очевидно, это не так;

<Window.Resources>
  <Style TargetType="{x:Type Button}">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
          <Border Background="Red">
            <ContentPresenter/>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>

  <!-- badness -->
  <Style TargetType="{x:Type Button}" x:Key="HugeBut">
    <Setter Property="Foreground" Value="Yellow"/>
  </Style>

  <!-- works, but I do not want to explicitly set the based-on. -->
  <Style TargetType="{x:Type Button}" x:Key="HugeBut" BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="Foreground" Value="Yellow"/>
  </Style>
</Window.Resources>

<Button Content="Regular" />
<Button Content="huge!" Style="{StaticResource HugeBut}"/>

Можно ожидать две красные кнопки, одну с черным текстом и одну с желтым, но Style HugeBut наследует все значения, которые я не указал в своем безымянном стиле, из системной темы по умолчанию для кнопки (Aero в моем случае).

Что я могу сделать, чтобы изменить это поведение?

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Похоже, что ответ здесь:

http://wpfthemereplacer.codeplex.com/

Из описания сайта:

Эта библиотека позволяет пользователям предоставлять собственные словари ресурсов заменить стандартные словари темы, загруженные WPF. Это делает это так что вам не нужно украшать собственные стили BasedOn = "{StaticResource {x: Type ...}}", когда ваша собственная тема используется в вашем приложении. Это также делает это, если у вас есть обычай элементы управления, которые просто обеспечивают расширенные возможности и не нужно заменить стиль, вам не нужно определять новый стиль или переопределить DefaultStyleKey при создании пользовательского элемента управления.

Это именно то, что я ищу. Это позволит мне использовать стили, так как они предназначены для использования в приложении, которое было «повторно тематизировано», вместо того, чтобы создавать темы посредством установки глобальных стилей (а затем заниматься отслеживанием фрагментов кода, в которых отсутствует BasedOn). или не может с этим справиться вообще из-за ошибок WPF и других ограничений)

0 голосов
/ 28 июля 2011

работает, но я не хочу явно устанавливать основанный на.

Ну, фреймворку не очень важно, если вы не хотите, насколько я знаюВы должны .

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