【问题标题】:WPF MaterialDesign SolidColorBrush Value ConflictWPF MaterialDesign SolidColorBrush 值冲突
【发布时间】:2021-02-24 18:18:31
【问题描述】:

我正在使用 Material Design 来设计我的 WPF 应用程序。我使用以下代码来设置标签视图的样式:

<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>

            <!-- Material Design -->
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />

            <!-- Styles -->
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <!--<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />-->
                </ResourceDictionary.MergedDictionaries>

                <!-- Tab Controller Primary Styles -->
                <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="#212121"/>
                <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="#212121"/>

                    <!-- This causes a clash between the tabview and the textbox colors -->
                    <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="#212121"/>
                    <!--<SolidColorBrush x:Key="PrimaryHueMidBrush" Color="#BB86FC"/>-->
                

                <SolidColorBrush x:Key="PrimaryHueMidForegroundBrush" Color="#FFFFFF"/>
                <SolidColorBrush x:Key="PrimaryHueDarkBrush" Color="#212121"/>
                <SolidColorBrush x:Key="PrimaryHueDarkForegroundBrush" Color="#212121"/>
            </ResourceDictionary>

            

            <!-- Tab Controller Secondary Styles -->
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                </ResourceDictionary.MergedDictionaries>
                <SolidColorBrush x:Key="SecondaryAccentBrush" Color="#BB86FC"/>
                <SolidColorBrush x:Key="SecondaryAccentForegroundBrush" Color="#BB86FC"/>
            </ResourceDictionary>
            <ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/materialdesign.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <Style TargetType="{x:Type dragablz:TabablzControl}" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}" />
        
    </ResourceDictionary>

我遇到的问题是,要设置 TabController 主要样式的样式,它会更改应用程序中 TextBox 的颜色。

当我应用深色来设置选项卡视图的样式时,TextBox 失去了紫色突出显示。

但是现在在第二张图片中,当我将 TextBox 的颜色改回紫色时,TabView 看起来很可怕。

它们的样式都依赖于相同的字典键。有没有办法可以根据应用的对象类型更改 x:Key 值?保留两个组件所需样式的最佳方法是什么。

这是我的大学论文,感谢您的帮助!

一切顺利。

【问题讨论】:

    标签: c# wpf xaml user-interface material-design-in-xaml


    【解决方案1】:

    Material Design 画笔用于各种样式的控件,使用 DynamicResource。这意味着如果您在运行时使用相同的x:Key 替换或注册画笔,所有动态引用都将被调整,并且更改将应用​​于您定义它的资源字典范围内的所有控件。

    一般来说,您必须复制要应用更改颜色的控件的默认样式和模板并对其进行调整,例如通过创建一个单独的画笔并使用它而不是原始画笔,假设值是直接在控件模板中分配的,而不是模板绑定。

    如果是TabablzControl,可能会有更简单的方法。从它的default style at GitHub,我只能看到PrimaryHueMidBrush 的一种用法,它在Setter 中设置为BorderBrush。你可以用你的风格重写它。

    <Style TargetType="{x:Type dragablz:TabablzControl}" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}">
       <Setter Property="BorderBrush" Value="#212121"/>
    </Style>
    

    当然,您可以创建一个自定义画笔并通过DynamicResource 引用它,而不是对其进行硬编码。

    <Setter Property="BorderBrush" Value="{DynamicResource MyCustomPrimaryHueMidBrush}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2017-08-31
      • 2013-03-14
      • 2021-01-22
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多