首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MaterialDesign SolidColorBrush值冲突

MaterialDesign SolidColorBrush值冲突
EN

Stack Overflow用户
提问于 2020-11-12 17:46:44
回答 1查看 470关注 0票数 0

我正在使用材料设计风格我的WPF应用程序。我使用了以下代码来设置选项卡视图的样式:

代码语言:javascript
复制
<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:键值?保存两个组件所需的样式的最佳方法是什么。

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

万事如意。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-13 11:23:19

材料设计笔刷使用在各种风格的控件使用DynamicResource。这意味着,如果您在运行时使用相同的x:Key替换或注册一个画笔,那么所有的动态引用都将被调整,并且更改将应用于资源字典中定义它的范围内的所有控件。

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

TabablzControl的情况下,可能有一种更简单的方法。从它的默认样式在GitHub中,我只能看到PrimaryHueMidBrush的一种用法,它在Setter中被设置为BorderBrush。你可以用你的风格写这个。

代码语言:javascript
复制
<Style TargetType="{x:Type dragablz:TabablzControl}" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}">
   <Setter Property="BorderBrush" Value="#212121"/>
</Style>

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

代码语言:javascript
复制
<Setter Property="BorderBrush" Value="{DynamicResource MyCustomPrimaryHueMidBrush}"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64809079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档