WPF替换和扩展样式



如何更改WPF对控件的默认样式的想法?为什么会发生这种情况呢?在下面的XAML中,我为Button声明了一个样式,然后进一步声明了一个新样式,该样式覆盖了一个名为"HugeBut"的setter。我希望HugeBut是隐式BasedOn我的新未命名的样式,但显然它不是;

<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继承了我没有在系统默认主题中为Button(在我的例子中是Aero)指定的未命名样式的所有值。

我能做些什么来改变这种行为?

答案似乎就在这里:

http://wpfthemereplacer.codeplex.com/

来自网站描述:

这个库允许用户提供自己的资源字典以替换WPF加载的默认主题字典。这就使得所以你不需要装饰自定义样式BasedOn="{StaticResource {x:Type…"}}",当您的自定义主题为在您的应用程序中使用。如果你有风俗习惯的话只提供增强功能而不需要的控件替换样式时,不需要定义新的样式或当你创建自定义控件时,重写DefaultStyleKey。

这正是我要找的。这将允许我使用样式,因为它们是为了在一个应用程序中使用,已经广泛地"重新主题化",而不是通过设置全局样式(然后处理跟踪代码缺少BasedOn的位,或者由于WPF错误和其他限制而无法处理它)

可以工作,但是我不想显式地设置基于。

好吧,如果你不想,框架不会真的在意,据我所知,你必须

相关内容

  • 没有找到相关文章

最新更新