我正在使用Dragablz和Mahapps,我希望能够在现代Material Design类型的标签和梯形标签之间切换。我已经创建了两个TabablzControl样式,我可以在它们之间切换,并且有一个CustomHeaderViewModel,我可以更改它的外观以适应不断变化的标签样式。我的标题有一个带有文本块和图标的堆栈面板。我可以改变SP的背景颜色,但在梯形模式下,我不知道如何改变梯形的背景,以配合所选择的颜色主题。
以下是我的两种风格:
<Style TargetType="{x:Type dragablz:TabablzControl}" x:Key="TabablzControlStyle">
<Setter Property="NewItemFactory" Value="{x:Static stUi:UINewItem.Factory}" />
<Setter Property="ItemsSource" Value="{Binding Items}" />
<Setter Property="ClosingItemCallback" Value="{Binding ClosingTabItemHandler}" />
<Setter Property="ShowDefaultCloseButton" Value="False" />
<Setter Property="AdjacentHeaderItemOffset" Value="-10" />
<Setter Property="ItemContainerStyle" Value="{StaticResource TrapezoidDragableTabItemStyle}" />
<Setter Property="HeaderMemberPath" Value="Header" />
<Setter Property="Background" Value="Red"/>
<Setter Property="InterTabController" Value="{StaticResource InterTabController}" />
<Setter Property="Margin" Value="0 8 0 0" />
</Style>
<Style TargetType="{x:Type dragablz:TabablzControl}" x:Key="ModernControlStyle">
<Setter Property="NewItemFactory" Value="{x:Static stUi:UINewItem.Factory}" />
<Setter Property="ItemsSource" Value="{Binding Items}" />
<Setter Property="ClosingItemCallback" Value="{Binding ClosingTabItemHandler}" />
<Setter Property="ShowDefaultCloseButton" Value="False" />
<Setter Property="AdjacentHeaderItemOffset" Value="0" />
<Setter Property="HeaderMemberPath" Value="Header" />
<Setter Property="InterTabController" Value="{StaticResource InterTabController}" />
<Setter Property="Margin" Value="0 8 0 0" />
</Style>
你可以看到堆栈面板周围的区域比SP本身更亮。如何更改梯形颜色?
谢谢,史蒂夫
3条答案
按热度按时间xxb16uws1#
我认为你可以基于
TrapezoidDragableTabItemStyle
创建新的样式并覆盖Background
属性。之后,您必须在
TabablzControl
的ItemContainerStyle
属性中设置此新样式。5us2dqdw2#
好吧,我找不到一个优雅的方法来做到这一点,所以我添加了代码来查找自定义头代码的Loaded()函数中的“Trapezoid”类型:
TryFindParent从这里:How can I find WPF controls by name or type?
对我来说就行了。改变颜色通常只会做一次,设置也会保存。
谢谢
x6h2sr283#
我将丹尼尔的答案标记为正确,但只是想举例说明代码,以防有人不知道如何实现。