TabControl样式编写

 在实际项目的UI设计中,经常会使用到TabControl,比如标签式浏览器、选项卡设置等等。 

 根据不同的需求,需要TabControl展示不同的样式,这里我们来学习下TabControl。

 来看下TabControl 属性

 TabStripPlacement 控制TabItem Header的方向,如图:

 

我们来看下TabControl的继承关系:

 TabControl-Seletor-ItemControl

这样就很清晰了,TabControl和ListBox一样继承自Seletor,这样我们就可以通过ControlTemplate和DataTemplate来编写TabControl和TabItem的显示样式。

例子:

 1 <Window x:Class="WpfApplication2.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         xmlns:local="clr-namespace:WpfApplication2"
 5         Title="MainWindow" Height="300" Width="300">
 6     <Window.Resources>
 7         <Style TargetType="{x:Type local:CustomItem}">
 8             <Setter Property="Padding" Value="0" />
 9             <Setter Property="HeaderTemplate">
10                 <Setter.Value>
11                     <DataTemplate>
12                         <ContentPresenter Content="{TemplateBinding Property=ContentControl.Content}">
13                             <ContentPresenter.LayoutTransform>
14                                 <RotateTransform Angle="-90" />
15                             </ContentPresenter.LayoutTransform>
16                         </ContentPresenter>
17                     </DataTemplate>
18                 </Setter.Value>
19             </Setter>
20             <Setter Property="Template">
21                 <Setter.Value>
22                     <ControlTemplate TargetType="{x:Type local:CustomItem}">
23                         <Border x:Name="bd1" CornerRadius="30" BorderThickness="2" BorderBrush="Blue">
24                             <Border.Background>
25                                 <ImageBrush ImageSource="{Binding Path=Icon, RelativeSource={RelativeSource TemplatedParent}}"></ImageBrush>
26                             </Border.Background>
27                             <Grid x:Name="grd">
28                                 <ContentPresenter ContentSource="Header" HorizontalAlignment="Center"
29                                           Margin="10,2,10,2" VerticalAlignment="Center"/>
30                             </Grid>
31                         </Border>
32                         <ControlTemplate.Triggers>
33                             <Trigger Property="IsMouseOver" Value="True" SourceName="grd">
34                                 <Setter Property="BorderBrush" Value="Yellow" TargetName="bd1"/>
35                             </Trigger>
36                             <Trigger Property="Selector.IsSelected" Value="True">
37                                 <Setter Property="BorderBrush" TargetName="bd1" Value="Red"></Setter>
38                             </Trigger>
39                         </ControlTemplate.Triggers>
40                     </ControlTemplate>
41                 </Setter.Value>
42             </Setter>
43         </Style>
44     </Window.Resources>
45     <DockPanel>
46         <TabControl TabStripPlacement="Left">
47             <local:CustomItem Header="Tab1" Width="80" Height="80" Icon="Resources/greentouch2.jpg">
48                 <Label Content="adadada"></Label>
49             </local:CustomItem>
50             <local:CustomItem Header="Tab2" Width="80" Height="80" Icon="Resources/background2.jpg"></local:CustomItem>
51         </TabControl>
52     </DockPanel>
53 </Window>

原文地址:https://www.cnblogs.com/tmywu/p/2745888.html