我正在使用材料设计风格我的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:键值?保存两个组件所需的样式的最佳方法是什么。
这是为我的大学论文,所以我感谢您的帮助!
万事如意。
发布于 2020-11-13 11:23:19
材料设计笔刷使用在各种风格的控件使用DynamicResource。这意味着,如果您在运行时使用相同的x:Key替换或注册一个画笔,那么所有的动态引用都将被调整,并且更改将应用于资源字典中定义它的范围内的所有控件。
通常,您必须复制要应用已更改颜色的控件的默认样式和模板,并对其进行调整,例如创建一个单独的画笔,并使用它代替原始画笔,因为这些值是直接在控件模板中分配的,而不是模板绑定。
在TabablzControl的情况下,可能有一种更简单的方法。从它的默认样式在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}"/>https://stackoverflow.com/questions/64809079
复制相似问题