Dragablz梯形选项卡背景(WPF)

62lalag4  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(243)

我正在使用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本身更亮。如何更改梯形颜色?
谢谢,史蒂夫

xxb16uws

xxb16uws1#

我认为你可以基于TrapezoidDragableTabItemStyle创建新的样式并覆盖Background属性。
之后,您必须在TabablzControlItemContainerStyle属性中设置此新样式。

5us2dqdw

5us2dqdw2#

好吧,我找不到一个优雅的方法来做到这一点,所以我添加了代码来查找自定义头代码的Loaded()函数中的“Trapezoid”类型:

var trap = TryFindParent<Trapezoid>(this);

        if (null != trap)
        {
            trap.Background = Application.Current.Resources["AccentColorBrush1"] as SolidColorBrush;
        }

TryFindParent从这里:How can I find WPF controls by name or type?
对我来说就行了。改变颜色通常只会做一次,设置也会保存。
谢谢

x6h2sr28

x6h2sr283#

我将丹尼尔的答案标记为正确,但只是想举例说明代码,以防有人不知道如何实现。

Style oldStyle = TryFindResource("TrapezoidDragableTabItemStyle") as Style;
Style newHeaderStyle = new(typeof(DragablzItem), oldStyle);
Setter backgroundSetter = new Setter() { Property = BackgroundProperty, Value = Brushes.LightBlue };
newHeaderStyle.Setters.Add(backgroundSetter);
MyTabablzControl.ItemContainerStyle = newHeaderStyle;

相关问题