Создание вкладок в элементе управления FLAT (WPF) - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть tabControl в моем приложении WPF.Я хочу, чтобы табитемы были плоскими. Когда я наводил на них курсор, они не должны меняться.

Можете ли вы помочь мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

Не знаю, является ли это именно тем, что вам нужно, но вы можете добавить этот шаблон данных и стиль в свой словарь ресурсов, чтобы отформатировать TabControl с плоским стилем ...

    <ControlTemplate x:Key="TabItemTemplate" TargetType="{x:Type TabItem}">
    <Border Cursor="Hand" x:Name="tab" Background="White" BorderThickness="1,1,1,0" BorderBrush="Black" Padding="5">
        <Grid>
            <ContentPresenter   x:Name="contentPresenter" ContentSource="Header"
                                TextBlock.Foreground="Black"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Left"/>
        </Grid>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsSelected" Value="False">
            <Setter TargetName="tab" Property="Background" Value="Gray"/>
            <Setter TargetName="tab" Property="BorderBrush" Value="Black"/>
        </Trigger>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="False" />
                <Condition Property="IsMouseOver" Value="True"/>
            </MultiTrigger.Conditions>
            <MultiTrigger.Setters>
                <Setter TargetName="tab" Property="BorderBrush" Value="White"/>
                <Setter TargetName="tab" Property="BorderThickness" Value="1,1,1,0"/>
            </MultiTrigger.Setters>
        </MultiTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

<Style TargetType="{x:Type TabControl}">
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="Black"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TabControl}">
                <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <TabPanel x:Name="HeaderPanel" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/>
                    <Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local">
                        <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </Border>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="{x:Type TabItem}">
    <Setter Property="Template" Value="{StaticResource TabItemTemplate}" />
</Style>
0 голосов
/ 24 ноября 2011

Поскольку вы хотите сделать TabItem s плоским, все, что вам нужно, это удалить триггеры из значения по умолчанию ControlTemplate из TabItem, которые отвечают за придание вашему TabItem вида интерактивного управления. Попробуйте этот пример, надеюсь, это то, что вы хотите -

<Grid>
    <TabControl>
        <TabControl.Resources>
            <Style TargetType="TabItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="TabItem">
                            <Grid SnapsToDevicePixels="True">
                                <Border BorderThickness="1,1,1,0" Padding="{TemplateBinding Control.Padding}" BorderBrush="{TemplateBinding Border.BorderBrush}"
                                        Background="{TemplateBinding Panel.Background}" Name="Bd">
                                    <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding HeaderedContentControl.Header}"
                                                      ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}"
                                                      ContentStringFormat="{TemplateBinding HeaderedContentControl.HeaderStringFormat}" 
                                                      ContentSource="Header" Name="Content" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                                                      SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
                                </Border>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TabControl.Resources>
        <TabItem Content="test1" Header="test1"/>
        <TabItem Content="test2" Header="test2"></TabItem>
        <TabItem Content="test3" Header="test3"></TabItem>
    </TabControl>
</Grid>
...