1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > WPF TabControl控件示例

WPF TabControl控件示例

时间:2022-11-23 07:25:52

相关推荐

WPF TabControl控件示例

WPF TabControl控件示例

运行效果:

主窗体XAML代码:

<Window x:Class="WPF0417.MainWindow"xmlns="/winfx//xaml/presentation"xmlns:x="/winfx//xaml"xmlns:d="/expression/blend/"xmlns:mc="/markup-compatibility/"xmlns:local="clr-namespace:WPF0417"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Border Background="#9C734B"><Grid><TabControl Style="{StaticResource TabControlStyle}"><TabItem Header="首页" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem><TabItem Header="新闻" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem><TabItem Header="专题" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem><TabItem Header="社区" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem><TabItem Header="活动" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem><TabItem Header="交流" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem><TabItem Header="关于" Foreground="#ddffffff" Style="{StaticResource TabItemStyle}"></TabItem></TabControl></Grid></Border></Window>

新建一个Styles文件夹,内部添加一个资源字典文件TabControl,代码如下:

<ResourceDictionary xmlns="/winfx//xaml/presentation"xmlns:x="/winfx//xaml"xmlns:local="clr-namespace:WPF0417.Styles"xmlns:controls="clr-namespace:WPFDemo.Controls"><Style x:Key="TabControlStyle" TargetType="{x:Type TabControl}"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TabControl}"><Grid Background="Transparent"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Border BorderBrush="Transparent" BorderThickness="0 0 0 0"><TabPanel IsItemsHost="True"/></Border><Border Grid.Row="1"BorderBrush="Transparent"Padding="0"BorderThickness="0" Background="{TemplateBinding Background}"><ContentPresenter ContentSource="SelectedContent" Name="PART_SelectedContentHost"/></Border></Grid></ControlTemplate></Setter.Value></Setter></Style><!--TabControl--><Style x:Key="TabItemStyle" TargetType="TabItem"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="TabItem"><Grid ><Border x:Name="bd"Background="Transparent"Height="30"BorderBrush="Transparent"BorderThickness="0 0 0 0"CornerRadius="0,0,0,0"Margin="0"><TextBlock x:Name="txt" Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},Path=Header}" VerticalAlignment="Center" Margin="30 0"/></Border><Rectangle Fill="Red" Height="3" VerticalAlignment="Bottom" Visibility="Hidden" Name="LeftSideRectangle"></Rectangle></Grid><ControlTemplate.Triggers><Trigger Property="IsSelected" Value="true"><Setter TargetName="bd" Property="BorderThickness" Value="0,0,0,0" /><Setter TargetName="bd" Property="BorderBrush" Value="Transparent" /><Setter TargetName="bd" Property="Background" Value="#33ffffff" /><Setter TargetName="LeftSideRectangle" Property="Visibility" Value="Visible"></Setter><!--<Setter TargetName="bd" Property="Background" Value="{StaticResource defaultcolor}" />--><Setter TargetName="txt" Property="Foreground" Value="#fff"/></Trigger><!--<Trigger Property="IsMouseOver" Value="true"><Setter TargetName="txt" Property="Foreground" Value="{StaticResource defaultoverbg}"/></Trigger>--><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsSelected" Value="False"/><Condition Property="IsMouseOver" Value="True"/></MultiTrigger.Conditions><Setter TargetName="txt" Property="Foreground" Value="#fff"/></MultiTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="TabControlStyle1" TargetType="{x:Type TabControl}"><Setter Property="Padding" Value="2"/><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="VerticalContentAlignment" Value="Center"/><Setter Property="Background" Value="White"/><Setter Property="BorderBrush" Value="#FFACACAC"/><Setter Property="BorderThickness" Value="1"/><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TabControl}"><Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"><Grid x:Name="templateRoot" ClipToBounds="True" SnapsToDevicePixels="True" KeyboardNavigation.TabNavigation="Local"><Grid.ColumnDefinitions><ColumnDefinition x:Name="ColumnDefinition0"/><ColumnDefinition x:Name="ColumnDefinition1" Width="0"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition x:Name="RowDefinition0" Height="Auto"/><RowDefinition x:Name="RowDefinition1" Height="*"/></Grid.RowDefinitions><UniformGrid x:Name="HeaderPanel" Rows="1" Background="Transparent" Grid.Column="0" IsItemsHost="True" Margin="0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/><Line X1="0" X2="{Binding ActualWidth, RelativeSource={RelativeSource Self}}" Stroke="White" StrokeThickness="0.1" VerticalAlignment="Bottom" Margin="0 0 0 1" SnapsToDevicePixels="True"/><Border x:Name="ContentPanel" BorderThickness="0" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local"><ContentPresenter x:Name="PART_SelectedContentHost" ContentTemplate="{TemplateBinding SelectedContentTemplate}" Content="{TemplateBinding SelectedContent}" ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" ContentSource="SelectedContent" Margin="0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/></Border></Grid></Border><ControlTemplate.Triggers><Trigger Property="TabStripPlacement" Value="Bottom"><Setter Property="Grid.Row" TargetName="HeaderPanel" Value="1"/><Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/><Setter Property="Height" TargetName="RowDefinition0" Value="*"/><Setter Property="Height" TargetName="RowDefinition1" Value="Auto"/></Trigger><Trigger Property="TabStripPlacement" Value="Left"><Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/><Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/><Setter Property="Grid.Column" TargetName="HeaderPanel" Value="0"/><Setter Property="Grid.Column" TargetName="ContentPanel" Value="1"/><Setter Property="Width" TargetName="ColumnDefinition0" Value="Auto"/><Setter Property="Width" TargetName="ColumnDefinition1" Value="*"/><Setter Property="Height" TargetName="RowDefinition0" Value="*"/><Setter Property="Height" TargetName="RowDefinition1" Value="0"/></Trigger><Trigger Property="TabStripPlacement" Value="Right"><Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/><Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/><Setter Property="Grid.Column" TargetName="HeaderPanel" Value="1"/><Setter Property="Grid.Column" TargetName="ContentPanel" Value="0"/><Setter Property="Width" TargetName="ColumnDefinition0" Value="*"/><Setter Property="Width" TargetName="ColumnDefinition1" Value="Auto"/><Setter Property="Height" TargetName="RowDefinition0" Value="*"/><Setter Property="Height" TargetName="RowDefinition1" Value="0"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}"><Setter Property="Foreground" Value="White"/><Setter Property="Background" Value="Transparent"/><Setter Property="BorderBrush" Value="#FFACACAC"/><Setter Property="Margin" Value="0"/><Setter Property="HorizontalContentAlignment" Value="Stretch"/><Setter Property="VerticalContentAlignment" Value="Stretch"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TabItem}"><Grid x:Name="templateRoot" SnapsToDevicePixels="True" Background="Transparent"><TextBlock x:Name="txt" Visibility="Visible" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{TemplateBinding Header}" ToolTip="{TemplateBinding Header}" Foreground="{TemplateBinding Foreground}" TextTrimming="CharacterEllipsis" /></Grid><ControlTemplate.Triggers><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/></MultiDataTrigger.Conditions><Setter Property="Foreground" TargetName="txt" Value="#fffea1"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Left"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Bottom"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Right"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/></MultiDataTrigger.Conditions><Setter Property="Panel.ZIndex" Value="1"/><Setter Property="Foreground" TargetName="txt" Value="#fffea1"/></MultiDataTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="TabControlWithUnderLineStyle" TargetType="{x:Type TabControl}"><Setter Property="Padding" Value="2"/><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="VerticalContentAlignment" Value="Center"/><Setter Property="Background" Value="White"/><Setter Property="BorderBrush" Value="#FFACACAC"/><Setter Property="BorderThickness" Value="1"/><Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TabControl}"><Grid x:Name="templateRoot" ClipToBounds="True" Background="{TemplateBinding Background}" SnapsToDevicePixels="True" KeyboardNavigation.TabNavigation="Local"><Grid.ColumnDefinitions><ColumnDefinition x:Name="ColumnDefinition0"/><ColumnDefinition x:Name="ColumnDefinition1" Width="0"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition x:Name="RowDefinition0" Height="Auto"/><RowDefinition x:Name="RowDefinition1" Height="*"/></Grid.RowDefinitions><TabPanel x:Name="HeaderPanel" HorizontalAlignment="Center" Background="Transparent" Grid.Column="0" IsItemsHost="True" Margin="0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1"/><Line X1="0" X2="{Binding ActualWidth, RelativeSource={RelativeSource Self}}" Stroke="Gray" StrokeThickness="0.1" VerticalAlignment="Bottom" Margin="0 0 0 1" SnapsToDevicePixels="True"/><Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="0" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="1" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local"><ContentPresenter x:Name="PART_SelectedContentHost" ContentTemplate="{TemplateBinding SelectedContentTemplate}" Content="{TemplateBinding SelectedContent}" ContentStringFormat="{TemplateBinding SelectedContentStringFormat}" ContentSource="SelectedContent" Margin="0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/></Border></Grid><ControlTemplate.Triggers><Trigger Property="TabStripPlacement" Value="Bottom"><Setter Property="Grid.Row" TargetName="HeaderPanel" Value="1"/><Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/><Setter Property="Height" TargetName="RowDefinition0" Value="*"/><Setter Property="Height" TargetName="RowDefinition1" Value="Auto"/></Trigger><Trigger Property="TabStripPlacement" Value="Left"><Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/><Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/><Setter Property="Grid.Column" TargetName="HeaderPanel" Value="0"/><Setter Property="Grid.Column" TargetName="ContentPanel" Value="1"/><Setter Property="Width" TargetName="ColumnDefinition0" Value="Auto"/><Setter Property="Width" TargetName="ColumnDefinition1" Value="*"/><Setter Property="Height" TargetName="RowDefinition0" Value="*"/><Setter Property="Height" TargetName="RowDefinition1" Value="0"/></Trigger><Trigger Property="TabStripPlacement" Value="Right"><Setter Property="Grid.Row" TargetName="HeaderPanel" Value="0"/><Setter Property="Grid.Row" TargetName="ContentPanel" Value="0"/><Setter Property="Grid.Column" TargetName="HeaderPanel" Value="1"/><Setter Property="Grid.Column" TargetName="ContentPanel" Value="0"/><Setter Property="Width" TargetName="ColumnDefinition0" Value="*"/><Setter Property="Width" TargetName="ColumnDefinition1" Value="Auto"/><Setter Property="Height" TargetName="RowDefinition0" Value="*"/><Setter Property="Height" TargetName="RowDefinition1" Value="0"/></Trigger><Trigger Property="IsEnabled" Value="False"><Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="TabItemExWithUnderLineStyle" TargetType="{x:Type TabItem}"><Setter Property="Foreground" Value="White"/><Setter Property="Background" Value="Transparent"/><Setter Property="BorderBrush" Value="#FFACACAC"/><Setter Property="Margin" Value="0"/><Setter Property="HorizontalContentAlignment" Value="Stretch"/><Setter Property="VerticalContentAlignment" Value="Stretch"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type TabItem}"><Grid x:Name="templateRoot" SnapsToDevicePixels="True" Background="Transparent"><Border x:Name="_underline" BorderBrush="#37aefe" BorderThickness="0" Margin="{TemplateBinding Margin}"/><Grid><TextBlock x:Name="txt" Visibility="Visible" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{TemplateBinding Header}" ToolTip="{TemplateBinding Header}" Foreground="{TemplateBinding Foreground}" TextTrimming="CharacterEllipsis" /></Grid></Grid><ControlTemplate.Triggers><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="true"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/></MultiDataTrigger.Conditions><Setter Property="Foreground" TargetName="txt" Value="#37aefe"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Left"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Bottom"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Right"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="false"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/></MultiDataTrigger.Conditions><Setter Property="Opacity" TargetName="templateRoot" Value="0.56"/></MultiDataTrigger><MultiDataTrigger><MultiDataTrigger.Conditions><Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true"/><Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type TabControl}}}" Value="Top"/></MultiDataTrigger.Conditions><Setter Property="Panel.ZIndex" Value="1"/><Setter Property="Foreground" TargetName="txt" Value="#37aefe"/><Setter Property="BorderThickness" TargetName="_underline" Value="0 0 0 2"/></MultiDataTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style TargetType="{x:Type controls:TabItemClose}"><Setter Property="HorizontalContentAlignment" Value="Stretch"/><Setter Property="VerticalContentAlignment" Value="Stretch"/><Setter Property="Foreground" Value="#666666"/><Setter Property="Margin" Value="0 0 0 0"/><Setter Property="Padding" Value="0"/><Setter Property="BorderThickness" Value="0"/><Setter Property="CloseIcon" Value="/Images/close.png"/><Setter Property="NormalBackground" Value="White"/><Setter Property="OverBackgound" Value="#33ca5100"/><Setter Property="SelectedBackgound" Value="#ca5100"/><Setter Property="NormalForeground" Value="#555558"/><Setter Property="OverForeground" Value="White"/><Setter Property="SelectedForeground" Value="White"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type controls:TabItemClose}"><Border x:Name="_bordertop" Width="{TemplateBinding Width}" MaxWidth="{TemplateBinding MaxWidth}" Height="{TemplateBinding Height}" CornerRadius="{TemplateBinding CornerRadius}" Background="{TemplateBinding NormalBackground}" BorderThickness="{TemplateBinding BorderThickness}"BorderBrush="{TemplateBinding BorderBrush}" ToolTip="{TemplateBinding Header}" ><DockPanel><Image x:Name="_logo" DockPanel.Dock="Left" Visibility="Visible" Margin="{TemplateBinding LogoPadding}" Source="{TemplateBinding LogoIcon}" VerticalAlignment="Center" HorizontalAlignment="Center" Stretch="Uniform" Width="{TemplateBinding LogoIconWidth}" Height="{TemplateBinding LogoIconHeigth}" /><Grid Name="_grid" SnapsToDevicePixels="True"><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition x:Name="_col_close" Width="20" /></Grid.ColumnDefinitions><Border Grid.ColumnSpan="2" Background="White" Opacity="0"/><TextBlock x:Name="_txt" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" Margin="3 0 3 0" Foreground="{TemplateBinding NormalForeground}" TextAlignment="Center" HorizontalAlignment="Center" Text="{TemplateBinding Header}" /><Grid x:Name="_gridclose" Grid.Column="1" ><Border x:Name="_borderbg" Background="Black" Opacity="0" /><controls:ButtonEx x:Name="PART_Close_TabItem" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent" Visibility="Visible" Icon="{TemplateBinding CloseIcon}" ButtonType="Icon" /></Grid></Grid></DockPanel></Border><ControlTemplate.Triggers><Trigger Property="LogoIcon" Value="{x:Null}"><Setter TargetName="_logo" Property="Visibility" Value="Collapsed" /></Trigger><Trigger Property="IsCanClose" Value="false"><Setter TargetName="_gridclose" Property="Visibility" Value="Collapsed"/><Setter TargetName="_col_close" Property="Width" Value="0"/></Trigger><Trigger Property="IsSelected" Value="true"><Setter TargetName="_bordertop" Property="Background" Value="{Binding SelectedBackgound,RelativeSource={RelativeSource TemplatedParent}}" /><Setter TargetName="_txt" Property="Foreground" Value="{Binding SelectedForeground,RelativeSource={RelativeSource TemplatedParent}}"/></Trigger><MultiTrigger><MultiTrigger.Conditions><Condition Property="IsMouseOver" Value="true"/><Condition Property="IsSelected" Value="false"/></MultiTrigger.Conditions><Setter TargetName="_txt" Property="Foreground" Value="{Binding OverForeground,RelativeSource={RelativeSource TemplatedParent}}"/><Setter TargetName="_bordertop" Property="Background" Value="{Binding OverBackgound,RelativeSource={RelativeSource TemplatedParent}}"/></MultiTrigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary>

添加一个Controls文件夹,内部添加上个类ButtonEx,MultiComboBox,TabItemClose,代码如下:

ButtonEx类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Media;namespace WPFDemo.Controls{public class ButtonEx : Button{static ButtonEx(){DefaultStyleKeyProperty.OverrideMetadata(typeof(ButtonEx), new FrameworkPropertyMetadata(typeof(ButtonEx)));}public ButtonType ButtonType{get {return (ButtonType)GetValue(ButtonTypeProperty); }set {SetValue(ButtonTypeProperty, value); }}public static readonly DependencyProperty ButtonTypeProperty =DependencyProperty.Register("ButtonType", typeof(ButtonType), typeof(ButtonEx), new PropertyMetadata(ButtonType.Normal));public ImageSource Icon{get {return (ImageSource)GetValue(IconProperty); }set {SetValue(IconProperty, value); }}public static readonly DependencyProperty IconProperty =DependencyProperty.Register("Icon", typeof(ImageSource), typeof(ButtonEx), new PropertyMetadata(null));public CornerRadius CornerRadius{get {return (CornerRadius)GetValue(CornerRadiusProperty); }set {SetValue(CornerRadiusProperty, value); }}public static readonly DependencyProperty CornerRadiusProperty =DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(ButtonEx), new PropertyMetadata(new CornerRadius(0)));public Brush MouseOverForeground{get {return (Brush)GetValue(MouseOverForegroundProperty); }set {SetValue(MouseOverForegroundProperty, value); }}public static readonly DependencyProperty MouseOverForegroundProperty =DependencyProperty.Register("MouseOverForeground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());public Brush MousePressedForeground{get {return (Brush)GetValue(MousePressedForegroundProperty); }set {SetValue(MousePressedForegroundProperty, value); }}public static readonly DependencyProperty MousePressedForegroundProperty =DependencyProperty.Register("MousePressedForeground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());public Brush MouseOverBorderbrush{get {return (Brush)GetValue(MouseOverBorderbrushProperty); }set {SetValue(MouseOverBorderbrushProperty, value); }}public static readonly DependencyProperty MouseOverBorderbrushProperty =DependencyProperty.Register("MouseOverBorderbrush", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());public Brush MouseOverBackground{get {return (Brush)GetValue(MouseOverBackgroundProperty); }set {SetValue(MouseOverBackgroundProperty, value); }}public static readonly DependencyProperty MouseOverBackgroundProperty =DependencyProperty.Register("MouseOverBackground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());public Brush MousePressedBackground{get {return (Brush)GetValue(MousePressedBackgroundProperty); }set {SetValue(MousePressedBackgroundProperty, value); }}public static readonly DependencyProperty MousePressedBackgroundProperty =DependencyProperty.Register("MousePressedBackground", typeof(Brush), typeof(ButtonEx), new PropertyMetadata());protected override void OnClick(){base.OnClick();if (!string.IsNullOrEmpty(Name) && Name == "PART_Close_TabItem"){TabItemClose itemclose = FindVisualParent<TabItemClose>(this);(itemclose.Parent as TabControl).Items.Remove(itemclose);RoutedEventArgs args = new RoutedEventArgs(TabItemClose.CloseItemEvent, itemclose);itemclose.RaiseEvent(args);}}public static T FindVisualParent<T>(DependencyObject obj) where T : class{while (obj != null){if (obj is T)return obj as T;obj = VisualTreeHelper.GetParent(obj);}return null;}}public enum ButtonType{Normal,Icon,Text,IconText}}

MultiComboBox 类:

using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;namespace WPFDemo.Controls{public class MultiComboBox : ComboBox{static MultiComboBox(){DefaultStyleKeyProperty.OverrideMetadata(typeof(MultiComboBox), new FrameworkPropertyMetadata(typeof(MultiComboBox)));}private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){d.SetValue(e.Property, e.NewValue);}/// <summary>/// 选中项列表/// </summary>public ObservableCollection<MultiCbxBaseData> ChekedItems = new ObservableCollection<MultiCbxBaseData>();/// <summary>/// ListBox竖向列表/// </summary>private ListBox _ListBoxV;/// <summary>/// ListBox横向列表/// </summary>private ListBox _ListBoxH;public override void OnApplyTemplate(){base.OnApplyTemplate();_ListBoxV = Template.FindName("PART_ListBox", this) as ListBox;_ListBoxH = Template.FindName("PART_ListBoxChk", this) as ListBox;_ListBoxH.ItemsSource = ChekedItems;_ListBoxV.SelectionChanged += _ListBoxV_SelectionChanged;_ListBoxH.SelectionChanged += _ListBoxH_SelectionChanged;if (ItemsSource != null){foreach (var item in ItemsSource){MultiCbxBaseData bdc = item as MultiCbxBaseData;if (bdc.IsCheck){_ListBoxV.SelectedItems.Add(bdc);}}}}private void _ListBoxH_SelectionChanged(object sender, SelectionChangedEventArgs e){foreach (var item in e.RemovedItems){MultiCbxBaseData datachk = item as MultiCbxBaseData;for (int i = 0; i < _ListBoxV.SelectedItems.Count; i++){MultiCbxBaseData datachklist = _ListBoxV.SelectedItems[i] as MultiCbxBaseData;if (datachklist.ID == datachk.ID){_ListBoxV.SelectedItems.Remove(_ListBoxV.SelectedItems[i]);}}}}void _ListBoxV_SelectionChanged(object sender, SelectionChangedEventArgs e){foreach (var item in e.AddedItems){MultiCbxBaseData datachk = item as MultiCbxBaseData;datachk.IsCheck = true;if (ChekedItems.IndexOf(datachk) < 0){ChekedItems.Add(datachk);}}foreach (var item in e.RemovedItems){MultiCbxBaseData datachk = item as MultiCbxBaseData;datachk.IsCheck = false;ChekedItems.Remove(datachk);}}public class MultiCbxBaseData{private int _id;/// <summary>/// 关联主键/// </summary>public int ID{get {return _id; }set {_id = value; }}private string _viewName;/// <summary>/// 显示名称/// </summary>public string ViewName{get {return _viewName; }set{_viewName = value;}}private bool _isCheck;/// <summary>/// 是否选中/// </summary>public bool IsCheck{get {return _isCheck; }set {_isCheck = value; }}}}}

TabItemClose类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Media;namespace WPFDemo.Controls{public class TabItemClose : TabItem{static TabItemClose(){DefaultStyleKeyProperty.OverrideMetadata(typeof(TabItemClose), new FrameworkPropertyMetadata(typeof(TabItemClose)));}private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){d.SetValue(e.Property, e.NewValue);}/// <summary>/// 是否可以关闭/// </summary>public bool IsCanClose{get {return (bool)GetValue(IsCanCloseProperty); }set {SetValue(IsCanCloseProperty, value); }}public static readonly DependencyProperty IsCanCloseProperty =DependencyProperty.Register("IsCanClose", typeof(bool), typeof(TabItemClose), new PropertyMetadata(true, OnPropertyChanged));/// <summary>/// 关闭的图标/// </summary>public ImageSource CloseIcon{get {return (ImageSource)GetValue(CloseIconProperty); }set {SetValue(CloseIconProperty, value); }}public static readonly DependencyProperty CloseIconProperty =DependencyProperty.Register("CloseIcon", typeof(ImageSource), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 正常背景色/// </summary>public SolidColorBrush NormalBackground{get {return (SolidColorBrush)GetValue(NormalBackgroundProperty); }set {SetValue(NormalBackgroundProperty, value); }}public static readonly DependencyProperty NormalBackgroundProperty =DependencyProperty.Register("NormalBackground", typeof(SolidColorBrush), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 悬浮背景色/// </summary>public SolidColorBrush OverBackgound{get {return (SolidColorBrush)GetValue(OverBackgoundProperty); }set {SetValue(OverBackgoundProperty, value); }}public static readonly DependencyProperty OverBackgoundProperty =DependencyProperty.Register("OverBackgound", typeof(SolidColorBrush), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 选中背景色/// </summary>public SolidColorBrush SelectedBackgound{get {return (SolidColorBrush)GetValue(SelectedBackgoundProperty); }set {SetValue(SelectedBackgoundProperty, value); }}public static readonly DependencyProperty SelectedBackgoundProperty =DependencyProperty.Register("SelectedBackgound", typeof(SolidColorBrush), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 默认前景色/// </summary>public SolidColorBrush NormalForeground{get {return (SolidColorBrush)GetValue(NormalForegroundProperty); }set {SetValue(NormalForegroundProperty, value); }}public static readonly DependencyProperty NormalForegroundProperty =DependencyProperty.Register("NormalForeground", typeof(SolidColorBrush), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 悬浮前景色/// </summary>public SolidColorBrush OverForeground{get {return (SolidColorBrush)GetValue(OverForegroundProperty); }set {SetValue(OverForegroundProperty, value); }}public static readonly DependencyProperty OverForegroundProperty =DependencyProperty.Register("OverForeground", typeof(SolidColorBrush), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 选中前景色/// </summary>public SolidColorBrush SelectedForeground{get {return (SolidColorBrush)GetValue(SelectedForegroundProperty); }set {SetValue(SelectedForegroundProperty, value); }}public static readonly DependencyProperty SelectedForegroundProperty =DependencyProperty.Register("SelectedForeground", typeof(SolidColorBrush), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 控件圆角/// </summary>public CornerRadius CornerRadius{get {return (CornerRadius)GetValue(CornerRadiusProperty); }set {SetValue(CornerRadiusProperty, value); }}public static readonly DependencyProperty CornerRadiusProperty =DependencyProperty.Register("CornerRadius", typeof(CornerRadius), typeof(TabItemClose), new PropertyMetadata(new CornerRadius(0), OnPropertyChanged));/// <summary>/// 前置Logo/// </summary>public ImageSource LogoIcon{get {return (ImageSource)GetValue(LogoIconProperty); }set {SetValue(LogoIconProperty, value); }}public static readonly DependencyProperty LogoIconProperty =DependencyProperty.Register("LogoIcon", typeof(ImageSource), typeof(TabItemClose), new PropertyMetadata(null, OnPropertyChanged));/// <summary>/// 前置Logo宽度/// </summary>public double LogoIconWidth{get {return (double)GetValue(LogoIconWidthProperty); }set {SetValue(LogoIconWidthProperty, value); }}public static readonly DependencyProperty LogoIconWidthProperty =DependencyProperty.Register("LogoIconWidth", typeof(double), typeof(TabItemClose), new PropertyMetadata(double.Parse("0"), OnPropertyChanged));/// <summary>/// 前置Logo高度/// </summary>public double LogoIconHeigth{get {return (double)GetValue(LogoIconHeigthProperty); }set {SetValue(LogoIconHeigthProperty, value); }}public static readonly DependencyProperty LogoIconHeigthProperty =DependencyProperty.Register("LogoIconHeigth", typeof(double), typeof(TabItemClose), new PropertyMetadata(double.Parse("0"), OnPropertyChanged));/// <summary>/// LogoPadding/// </summary>public Thickness LogoPadding{get {return (Thickness)GetValue(LogoPaddingProperty); }set {SetValue(LogoPaddingProperty, value); }}public static readonly DependencyProperty LogoPaddingProperty =DependencyProperty.Register("LogoPadding", typeof(Thickness), typeof(TabItemClose), new PropertyMetadata(new Thickness(0), OnPropertyChanged));/// <summary>/// 关闭item事件/// </summary>public event RoutedEventHandler CloseItem{add {AddHandler(CloseItemEvent, value); }remove {RemoveHandler(CloseItemEvent, value); }}public static readonly RoutedEvent CloseItemEvent =EventManager.RegisterRoutedEvent("CloseItem", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(TabItemClose));/// <summary>/// 关闭项的右键菜单/// </summary>public ContextMenu ItemContextMenu {get; set; }Border ItemBorder;public override void OnApplyTemplate(){base.OnApplyTemplate();ItemBorder = Template.FindName("_bordertop", this) as Border;if (ItemContextMenu != null){ItemBorder.ContextMenu = ItemContextMenu;}}}}

在APP.XAML中引用资源字典:

<Application x:Class="WPF0417.App"xmlns="/winfx//xaml/presentation"xmlns:x="/winfx//xaml"xmlns:local="clr-namespace:WPF0417"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Styles/TabControl.xaml"></ResourceDictionary></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources></Application>

文件结构:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。