如何在WPF中应用样式而不覆盖包?

时间:2019-05-28 18:09:33

标签: wpf

我安装了软件包Material Design Themes,该软件包会更改按钮的外观。我想在按钮上使用样式,但是当使用样式时,按钮将恢复为应用样式的默认外观。 Example

我如何应用样式而不覆盖软件包?

MainWindow

  <Window.Resources>
        <Style TargetType="Button" x:Key="redFont">
            <Setter Property="Foreground" Value="red"/>
        </Style>
    </Window.Resources>

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button Content="Without style"/>
        <Button Style="{StaticResource redFont}" Content="With style"/>
    </StackPanel>

App.xaml

<Application x:Class="WPF_TestMaterialSetterProperties.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">

    <Application.Resources>
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
    </Application.Resources>
</Application>

1 个答案:

答案 0 :(得分:1)

该样式将覆盖您的派生样式。您需要将样式“ BasedOn”设置为通用类型样式,以继承您导入的样式。

<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}" x:Key="redFont">
   ...

该软件包将覆盖您的应用所使用的默认主题。您的新样式是“基于”的样式。