web-dev-qa-db-ja.com

WPF-TabItemを選択するか、カーソルを合わせると、TabItemの背景色が変わります

Xamlのタブアイテムの背景色を赤に設定しましたが、実行してカーソルを合わせるか選択すると、デフォルトの灰色がかった外観に戻ります。他のタブアイテムが選択されている場合にのみ正しく表示されます。どうすれば常に赤く保つことができますか。ありがとう!

15
TCoder

これがTabItem ControlTemplateの例です

それをリソースにコピーし、必要な場所に赤い色を背景として設定します。

[〜#〜]サンプル[〜#〜]

<Window x:Class="TestCustomTab.Window1"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <SolidColorBrush x:Key="RedBrush" Color="Red"/>       

        <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" />

        <SolidColorBrush x:Key="GreenBrush" Color="Green" />

        <SolidColorBrush x:Key="DisabledBackgroundBrush" Color="#EEE" />       

        <SolidColorBrush x:Key="DisabledBorderBrush" Color="#AAA" />        

        <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />

        <Style TargetType="{x:Type TabItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TabItem}">
                        <Grid>
                            <Border 
                                Name="Border"
                                Margin="0,0,-4,0" 
                                Background="{StaticResource RedBrush}"
                                BorderBrush="{StaticResource  SolidBorderBrush}" 
                                BorderThickness="1,1,1,1" 
                                CornerRadius="2,12,0,0" >
                                <ContentPresenter x:Name="ContentSite"
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Center"
                                    ContentSource="Header"
                                    Margin="12,2,12,2"
                                    RecognizesAccessKey="True"/>
                            </Border>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Panel.ZIndex" Value="100" />
                                <Setter TargetName="Border" Property="Background" Value="{StaticResource GreenBrush}" />
                                <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,0" />
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" />
                                <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" />
                                <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>        
    </Window.Resources>
    <Grid>
        <TabControl>
            <TabItem Header="MyTabItem" />
            <TabItem Header="MyTabItem"  />
        </TabControl>
    </Grid>
</Window>

テストWPFプロジェクトを作成し、Window1.xamlコードの代わりにサンプルコードを貼り付けます。

31
Eugene Cheverda