WPF MaterialDesign SolidColorBrush 值冲突
WPF MaterialDesign SolidColorBrush Value Conflict
我正在使用 Material 设计来设计我的 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 的颜色改回紫色时,TabView 看起来很糟糕。
它们的样式都依赖于相同的字典键。有没有一种方法可以根据应用的对象类型更改 x:Key 值?保留两个组件所需样式的最佳方法是什么。
这是我的大学论文,感谢您的帮助!
祝一切顺利。
Material 设计画笔用于使用 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}"/>
我正在使用 Material 设计来设计我的 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 的颜色改回紫色时,TabView 看起来很糟糕。
它们的样式都依赖于相同的字典键。有没有一种方法可以根据应用的对象类型更改 x:Key 值?保留两个组件所需样式的最佳方法是什么。
这是我的大学论文,感谢您的帮助!
祝一切顺利。
Material 设计画笔用于使用 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}"/>