Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改WPF选项卡控件的样式';s items template,以便设置选项卡标题';背景色?_Wpf_Xaml_Data Binding - Fatal编程技术网

如何更改WPF选项卡控件的样式';s items template,以便设置选项卡标题';背景色?

如何更改WPF选项卡控件的样式';s items template,以便设置选项卡标题';背景色?,wpf,xaml,data-binding,Wpf,Xaml,Data Binding,我使用WPF TabControl的ItemTemplate属性绑定每个TabItem标题的内容。我还使用ItemContainerStyle属性将TabItem的内容设置为动态选择的用户控件。这个方法100%按预期工作,但我现在在设置TabControl标题的样式时遇到了问题 我将TabControl的背景属性设置为黑色: <TabControl ItemsSource="{Binding Tabs.Tabs}" SelectedItem="{Bindin

我使用WPF TabControl的ItemTemplate属性绑定每个TabItem标题的内容。我还使用ItemContainerStyle属性将TabItem的内容设置为动态选择的用户控件。这个方法100%按预期工作,但我现在在设置TabControl标题的样式时遇到了问题

我将TabControl的背景属性设置为黑色:

<TabControl
        ItemsSource="{Binding Tabs.Tabs}"
        SelectedItem="{Binding Tabs.SelectedTab, Mode=TwoWay}"
        IsEnabled="{Binding ReadyForInput}"
        Background="Black"
        x:Name="MainTab">
        <TabControl.ItemTemplate>
            <DataTemplate>
                <StackPanel
                    Orientation="Horizontal">                      
                    <TextBlock
                        Text="{Binding TabHeader}"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ItemContainerStyle>
            <Style
                TargetType="TabItem">
                <Setter
                    Property="Content"
                    Value="{Binding TabContentControl}" />
            </Style>
        </TabControl.ItemContainerStyle>
    </TabControl>

这导致:

如果我在ItemTemplate中设置StackPanel的背景色,我将保留

当TabControl按原样绑定时,如何更改TabItems标题的背景色(样式)


谢谢大家!

在ItemContainerStyle中设置背景属性:

<TabControl.ItemContainerStyle>
    <Style TargetType="TabItem">
        <Setter Property="Background" Value="Black" />
        <Setter Property="Content" Value="{Binding TabContentControl}" />
    </Style>
</TabControl.ItemContainerStyle>

更改所选选项卡的背景颜色需要更多的努力。您需要覆盖TabItem的ControlTemplate。通过在Visual Studio或Blend中的设计模式中右键单击选项卡项,然后选择编辑模板->编辑副本,然后根据需要编辑,可以将默认模板复制到XAML标记中:

<TabControl ItemsSource="{Binding Tabs.Tabs}" Background="Black" x:Name="MainTab">
    <TabControl.Resources>
        <Style x:Key="FocusVisual">
            <Setter Property="Control.Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <LinearGradientBrush x:Key="TabItem.Static.Background" EndPoint="0,1" StartPoint="0,0">
            <GradientStop Color="#F0F0F0" Offset="0.0"/>
            <GradientStop Color="#E5E5E5" Offset="1.0"/>
        </LinearGradientBrush>
        <SolidColorBrush x:Key="TabItem.Static.Border" Color="#ACACAC"/>
        <LinearGradientBrush x:Key="TabItem.MouseOver.Background" EndPoint="0,1" StartPoint="0,0">
            <GradientStop Color="#ECF4FC" Offset="0.0"/>
            <GradientStop Color="#DCECFC" Offset="1.0"/>
        </LinearGradientBrush>
        <SolidColorBrush x:Key="TabItem.MouseOver.Border" Color="#7EB4EA"/>
        <SolidColorBrush x:Key="TabItem.Disabled.Background" Color="#F0F0F0"/>
        <SolidColorBrush x:Key="TabItem.Disabled.Border" Color="#D9D9D9"/>
        <SolidColorBrush x:Key="TabItem.Selected.Border" Color="#ACACAC"/>
        <SolidColorBrush x:Key="TabItem.Selected.Background" Color="Black"/>
    </TabControl.Resources>
    <TabControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock
                        Text="header..."
                        VerticalAlignment="Center"
                        HorizontalAlignment="Center" />
            </StackPanel>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Background" Value="Black" />
            <Setter Property="Content" Value="{Binding TabContentControl}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TabItem}">
                        <Grid x:Name="templateRoot" SnapsToDevicePixels="true">
                            <Border x:Name="mainBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1,1,1,0" Background="{TemplateBinding Background}" Margin="0">
                                <Border x:Name="innerBorder" BorderBrush="{StaticResource TabItem.Selected.Border}" BorderThickness="1,1,1,0" Background="{StaticResource TabItem.Selected.Background}" Margin="-1" Opacity="0"/>
                            </Border>
                            <ContentPresenter x:Name="contentPresenter" ContentSource="Header" Focusable="False" HorizontalAlignment="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/>
                                    <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Background" TargetName="mainBorder" Value="{StaticResource TabItem.MouseOver.Background}"/>
                                <Setter Property="BorderBrush" TargetName="mainBorder" Value="{StaticResource TabItem.MouseOver.Border}"/>
                                <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/>
                                <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/>
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/>
                                    <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Opacity" TargetName="contentPresenter" Value="0.56"/>
                                <Setter Property="Background" TargetName="mainBorder" Value="{StaticResource TabItem.Disabled.Background}"/>
                                <Setter Property="BorderBrush" TargetName="mainBorder" Value="{StaticResource TabItem.Disabled.Border}"/>
                                <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/>
                                <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/>
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/>
                                    <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
                                </MultiDataTrigger.Conditions>
                                <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/>
                                <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/>
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/>
                                    <Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
                                </MultiDataTrigger.Conditions>
                                <Setter Property="Panel.ZIndex" Value="1"/>
                                <Setter Property="Margin" Value="-2,-2,-2,0"/>
                                <Setter Property="Opacity" TargetName="innerBorder" Value="1"/>
                                <Setter Property="BorderThickness" TargetName="innerBorder" Value="1,1,1,0"/>
                                <Setter Property="BorderThickness" TargetName="mainBorder" Value="1,1,1,0"/>
                            </MultiDataTrigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>


您是否尝试将
ItemTemplate
StackPanel
Background
属性设置为黑色?是的,可以,但它仅设置堆栈面板的背景。页眉和StackPanel之间仍留有一些空白,因此无法完全设置选项卡页眉的背景色。在尝试您的建议时,我已使用另一个图像更新了我的问题,@Andy。这很有效。现在我只需要想一想如何把它清晰地转变成一种主题化的风格。非常感谢。