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>
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>