【问题标题】:Override Specific Style Properties using Resource Dictionary使用资源字典覆盖特定样式属性
【发布时间】:2017-02-17 08:14:24
【问题描述】:

我正在尝试根据我的要求覆盖 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”类型。

【问题讨论】:

    标签: wpf xaml material-design


    【解决方案1】:

    “MaterialDesignPaper”是SolidColorBrush,您不能将Window 样式基于Brush

    从您的Style 中删除BasedOn 属性和x:Name

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

    但我想覆盖 MaterialDesignBrush 背景

    然后用相同的键定义一个新的Brush 资源:

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

    【讨论】:

    • 但我想覆盖 MaterialDesignBrush 背景
    • 然后用相同的key定义一个新的Brush资源。请参阅我编辑的答案。
    • 它会用另一个 dll 中的这个键覆盖现有 Style 的 Color 属性吗?
    • 它将覆盖资源,这意味着所有使用 DynamicResource 标记扩展引用该资源的样式都会受到影响。确保在您合并其他资源之后添加资源
    • 但是如果您需要进一步的帮助,请提供您问题的 repo:stackoverflow.com/help/mcve
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2013-06-10
    • 2023-03-07
    • 1970-01-01
    • 2016-10-28
    • 2020-05-19
    相关资源
    最近更新 更多