使用资源字典覆盖特定样式属性

时间:2017-02-17 08:14:24

标签: wpf xaml material-design

我正在尝试按照我的要求覆盖Material Design for Xaml ToolKit的样式,以下是 app.xaml 中的xaml,我在阅读有关覆盖github页面后想出的内容库,但似乎没有工作,我不明白为什么,因为我没有太多的WPF应用程序工作经验,这是我尝试的代码:

<Color x:Key="DarkBlueColor">#00479D</Color>
<FontFamily x:Key="MicrosoftYaHei">Microsoft YaHei</FontFamily>
<SolidColorBrush x:Key="WindowBrush" Color="#00479D"/>

<Style x:Key="WindowStyle" 
       x:Name="WindowStyle" 
       BasedOn="{StaticResource MaterialDesignPaper}" 
       TargetType="{x:Type Window}">
    <Setter Property="Background" Value="{DynamicResource WindowBrush}"></Setter>
</Style>

暂时熟悉我只是想改变窗口的背景,这里的代码来自 MainWindow.xaml

<Window x:Class="WPFApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:XCMG.CarMan2"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525"
        Style="{StaticResource WindowStyle}"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes">
<Grid>

</Grid>
</Window>

当我在添加上面的代码后运行应用程序时,会抛出一个异常说:

  

无法将'System.Windows.Media.SolidColorBrush'类型的对象强制转换为'System.Windows.Style'。

1 个答案:

答案 0 :(得分:1)

&#34; MaterialDesignPaper&#34;是SolidColorBrush,您无法在Window上建立Brush样式。

BasedOn删除x:Name属性和Style

<Style x:Key="WindowStyle"
       TargetType="{x:Type Window}">
    <Setter Property="Background" Value="{DynamicResource WindowBrush}"></Setter>
</Style>
  

但我想覆盖MaterialDesignBrush BackGround

使用相同的密钥定义新的Brush资源:

<SolidColorBrush x:Key="MaterialDesignPaper" Color="#00479D"/>