C# WPF:材料设计&x2B;dragablz选项卡项标题样式

C# WPF:材料设计&x2B;dragablz选项卡项标题样式,c#,wpf,view,material-design,material-design-in-xaml,C#,Wpf,View,Material Design,Material Design In Xaml,我在WPF中使用MaterialDesign工具包和Dragablz。 我在尝试设置TabablzControl的样式时遇到问题。 我已经有了windows默认TabControl和TabItem标题的样式,如图所示: 但当我将默认的tabControl更改为TabablzControl时,它会变成这样: 以下是window.resources: <Style x:Key="mdTabControl" TargetType="TabControl"> &l

我在WPF中使用MaterialDesign工具包和Dragablz。 我在尝试设置
TabablzControl
的样式时遇到问题。 我已经有了windows默认
TabControl
TabItem
标题的样式,如图所示:

但当我将默认的tabControl更改为TabablzControl时,它会变成这样:

以下是window.resources:

    <Style x:Key="mdTabControl" TargetType="TabControl">
        <Setter Property="TextElement.Foreground" Value="{DynamicResource MaterialDesignBody}"/>
        <Setter Property="Background" Value="{DynamicResource MaterialDesignPaper}"></Setter>
    </Style>
    <Style x:Key="mdTabHeader" TargetType="{x:Type TabItem}">
        <Setter Property="Background" Value="{DynamicResource MaterialDesignPaper}"></Setter>
        <Setter Property="Foreground" Value="{DynamicResource MaterialDesignBody}"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid>
                        <Border Name="Border"  Margin="1,0,1,0" CornerRadius="3 3 0 0">
                            <ContentPresenter x:Name="ContentSite" VerticalAlignment="Center"
                                              HorizontalAlignment="Center"
                                              ContentSource="Header" Margin="10,2,10,2"
                                              RecognizesAccessKey="True">
                            </ContentPresenter>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Panel.ZIndex" Value="100" />
                            <Setter TargetName="Border" Property="Background" Value="{StaticResource SecondaryAccentBrush}" />
                            <Setter Property="Foreground" Value="{StaticResource SecondaryAccentForegroundBrush}"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter Property="Panel.ZIndex" Value="100" />
                            <Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryHueMidBrush}" />
                            <Setter Property="Foreground" Value="{StaticResource PrimaryHueMidForegroundBrush}"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryHueDarkBrush}" />
                            <Setter Property="Foreground" Value="{StaticResource PrimaryHueDarkForegroundBrush}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

当我将
mdTabControl
样式targetType更改为:
TargetType=“dbz:TabablzControl”

我想保留设置为
TabControl
的样式,但添加了
TabablzControl


如果您有任何帮助,我们将不胜感激。

首先要注意的是,这是WPF的一个通用特性,您没有正确使用样式继承

在将材质设计与Dragablz一起使用时,如果要重新设置选项卡控件本身的样式,则必须使用BasedOn继承Dragablz部件中的材质设计样式:

<Style x:Key="mdTabControl" TargetType="TabControl" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}"> 
    <Setter Property="TextElement.Foreground" Value="{DynamicResource MaterialDesignBody}"/>
    <Setter Property="Background" Value="{DynamicResource MaterialDesignPaper}"></Setter>
</Style>

同样,对于选项卡标题本身,您需要继承相关样式:

<Style x:Key="mdTabHeader" TargetType="{x:Type TabItem}" BasedOn="{StaticResource MaterialDesignDragableTabItemStyle}">
    . . .
</Style>

. . .
请注意(取决于您的App.xaml设置),您可能需要确保同一xaml文件中包含正确的资源字典。例如,更完整的XAML可能是:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Dragablz;component/Themes/materialdesign.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <Style x:Key="NormalTabItemStyle" TargetType="{x:Type dragablz:DragablzItem}" BasedOn="{StaticResource MaterialDesignDragableTabItemStyle}">
            <Setter Property="Width" Value="280" />
            <Setter Property="Padding" Value="1" />
        </Style>
        . . .
    </ResourceDictionary>                
</Window.Resources>

. . .
最后在更改TabItem样式时,您需要将TabablzCOntrol样式设置为正确的样式,或者您可以在实际声明TabablzCOntrol本身的地方使用它:

<dragablz:TabablzControl ItemContainerStyle="{StaticResource mdTabHeader}" />

演示解决方案中的侧面板项目就是一个很好的例子:



谢谢,是我没有在App.xaml中调用正确的字典资源,我刚开始学习WPF,不知道如何正确设置样式。使用App.xml内部进行材质设计
   <Style TargetType="{x:Type dragablz:TabablzControl}" BasedOn="{StaticResource MaterialDesignTabablzControlStyle}"/>