`
xqf222
  • 浏览: 124969 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

WPF后台动态添加TabItem并设置样式

 
阅读更多

1、前台myWindow.xaml文件中的代码
<TabControl x:Name="menuTab" Grid.RowSpan="2" Margin="0" Style="{DynamicResource TabControlStyle}" Grid.Row="1" Background="{x:Null}">
<TabItem Header="系统设置" Height="83" Margin="80,0,0,0" Width="74" Style="{DynamicResource TabItemStyle}">
<TabItem.Background>
<ImageBrush ImageSource="skin/ico/ico_dsmain.png"/> <!--这里图片需要替换才能正常运行-->
</TabItem.Background>
<Grid Background="{DynamicResource MyBrush}"/>
</TabItem>

<!--这里在后台动态添加和上面系统设置类似的TabItem和对应的样式等属性-->

</TabControl>

2、后台myWindow.xaml.cs文件中的代码
private void Button_Click(object sender, RoutedEventArgs e)
{
//动态添加子菜单
TabItem myDnymicTab = new TabItem() { Header = "用户管理", Height = 83, Width = 74 };
//设置图片
ImageBrush myImageBrush=new ImageBrush(new BitmapImage(new Uri(@"../../skin/ico/ico_PluginCleaner.png", UriKind.Relative)));
myDnymicTab.Background=myImageBrush;
//设置位置
Thickness myThickness =new Thickness(120,0,0,0);
myDnymicTab.Margin=myThickness;
//设置样式
Style myStyle = (Style)this.FindResource("TabItemStyle");//TabItemStyle这个样式是引用的资源文件中的样式名称
myDnymicTab.Style = myStyle;
//添加TabItem到TabControl中
menuTab.Items.Add(myDnymicTab);
menuTab.SelectedItem = myDnymicTab;

}

3、App.xaml中添加样式字典文件引用
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--App.xaml资源样式-->
<ResourceDictionary Source="TabControlStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

4、资源文件TabControlStyle.xaml中的样式:

<!-- 应该在此定义资源字典条目。-->
<Style x:Key="TabControlStyle" TargetType="{x:Type TabControl}">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Padding" Value="4,4,4,4"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="{StaticResource TabControlNormalBorderBrush}"/>
<Setter Property="Background" Value="#F9F9F9"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabControl}">
<Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="ColumnDefinition0" Width="0.192*" />
<ColumnDefinition x:Name="ColumnDefinition1" Width="0.808*"/>
</Grid.ColumnDefinitions>
<Border x:Name="ContentPanel" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" KeyboardNavigation.DirectionalNavigation="Contained" Grid.Row="0" KeyboardNavigation.TabIndex="2" KeyboardNavigation.TabNavigation="Local" Grid.ColumnSpan="1" Grid.RowSpan="1" Width="Auto" Margin="0">
<ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Width="Auto" Margin="0"/>
</Border>
<StackPanel x:Name="HeaderPanel" Margin="0" IsItemsHost="True">
<StackPanel.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#7AFFFFFF" Offset="0"/>
<GradientStop Color="#42F0FCFF" Offset="1"/>
</LinearGradientBrush>
</StackPanel.Background>
</StackPanel>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

<Style x:Key="TabItemStyle" TargetType="{x:Type TabItem}">
<Setter Property="FocusVisualStyle" Value="{StaticResource TabItemFocusVisual}"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Padding" Value="6,1,6,1"/>
<Setter Property="BorderBrush" Value="{StaticResource TabControlNormalBorderBrush}"/>
<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid SnapsToDevicePixels="true">
<Grid.RowDefinitions>
<RowDefinition Height="0.69*"/>
<RowDefinition Height="0.31*"/>
</Grid.RowDefinitions>
<Border x:Name="Bd" BorderThickness="0" CornerRadius="3" BorderBrush="Black" Margin="0" Grid.RowSpan="2" Visibility="Hidden">
<Border.Background>
<ImageBrush ImageSource="skin/ico/toolbar_pushed.png"/>
</Border.Background>
</Border>
<Border x:Name="fg" BorderThickness="0" CornerRadius="3" BorderBrush="Black" Margin="0" Grid.RowSpan="2" Visibility="Hidden" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Border.RenderTransform>
<Border.Background>
<ImageBrush ImageSource="skin/ico/toolbar_hover.png"/>
</Border.Background>
</Border>
<TextBlock Margin="0,0.333,0,3.833" TextWrapping="Wrap" VerticalAlignment="Stretch" d:LayoutOverrides="Height" Grid.Row="1" HorizontalAlignment="Center" Text="{TemplateBinding Header}" Foreground="White"/>
<Border x:Name="ico" BorderThickness="0" CornerRadius="3" BorderBrush="Black" Margin="4,4,4.25,0" Grid.RowSpan="1" HorizontalAlignment="Center" VerticalAlignment="Center" Width="48" Height="48" Background="{TemplateBinding Background}" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Border.RenderTransform>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true"/>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Visibility" TargetName="Bd" Value="Visible"/>
<Setter Property="Panel.ZIndex" TargetName="ico" Value="1"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="false"/>
<Condition Property="IsMouseOver" Value="true"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" TargetName="fg" Value="Visible"/>
<Setter Property="RenderTransform" TargetName="ico">
<Setter.Value>
<TransformGroup>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Setter.Value>
</Setter>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

分享到:
评论

相关推荐

    如何将关闭按钮添加到WPF TabItem

    本文将详细阐述如何在WPF TabItem上添加一个可操作的关闭按钮,并仅在选定的选项卡上显示。 首先,我们需要理解WPF中的模板和样式。样式定义了UI元素的外观,而模板则定义了UI元素的结构和行为。在本例中,我们将...

    WPF TabControl 带关闭按钮

    使用`DataTemplate`来定义这个模板,这里我们将添加一个`Button`作为关闭按钮,并设置其样式和事件处理。 3. **关闭按钮布局**: 在`HeaderTemplate`内,将`Button`放置在`TabItem`标题的右端。可以使用`Grid`或`...

    WPF tab宽度自适应 可关闭

    2. 添加关闭逻辑:在后台代码中,我们需要处理`CloseButton_Click`事件,实现关闭当前选中`TabItem`的功能。 ```csharp private void CloseButton_Click(object sender, RoutedEventArgs e) { var button = sender...

    自定义TabControl的Item显示样式(1)

    如果希望所有TabItem都使用同一样式,可以将样式定义在TabControl的资源字典中,并设置`ItemContainerStyle`属性。若只想针对某些特定TabItem应用样式,则直接在该TabItem上设置`Style`属性。 例如,下面是一个简单...

    wpf 自定义tabcontrol

    6. **扩展性**:有时我们可能需要在TabControl中添加自定义属性或行为,这时可以创建一个新的UserControl作为TabControl的子类,并添加所需属性和方法。 在提供的压缩包文件“cloundmusic_left”中,可能包含了一个...

    WPF學習教程與實例

    - **添加TabItem**: 通过XAML或者代码-behind动态添加TabItem,并设置其Header属性来显示页签标题。 - **切换事件**: TabControl提供了SelectedIndexChanged事件,可以在用户切换标签时触发特定操作。 - **自定义...

    WPF仿360界面.zip

    在创建菜单栏时,可以使用`Menu`控件,并通过`MenuItem`元素来添加各个菜单项。这些菜单项可以与后台的命令逻辑进行绑定,当用户点击时触发相应的功能。360界面中的快速启动按钮可以使用`Button`控件,通过设置其...

    自适应可关闭Tab_tab_Tabú_WPF_corne63_可关闭_源码

    2. **添加关闭按钮:** 每个TabItem(Tab页)通常会有一个可点击的关闭图标,这需要在XAML中定义,并与后台代码(C#或VB.NET)绑定,以便响应用户的关闭操作。 3. **自适应布局:** 自适应布局是指控件能够根据窗口...

    一款非常好的WPF编程宝典2010 源代码

    第1章 WPF概述 1 1.1 理解Windows图形 1 1.1.1 DirectX:新的图形引擎 1 1.1.2 硬件加速与WPF 2 1.2 WPF:高级API 4 1.2.1 分辨率无关性 5 1.2.2 WPF的演化 9 1.2.3 Windows窗体将继续保留 11 1.2.4 DirectX...

    WPF基于图形的TabControl和模式切换

    在WPF中,数据绑定允许UI元素与后台数据模型进行通信,从而动态地更新UI。我们可以为TabControl创建自定义的TabItem模板,将每个Tab项的数据绑定到一个图形元素,如一个Image控件,它的Source属性可以绑定到文件夹的...

    关闭安钮的TabPage

    首先,你需要在XAML中定义`TabControl`,并为每个`TabItem`添加一个关闭按钮。这可以通过在`HeaderTemplate`中插入一个`Button`来完成。例如: ```xml ,0,0,0" Click="CloseButton_Click"/&gt; &lt;!...

    MeoAsstGui开发指南1

    若要覆盖这些样式,你需要继承HandyControl的静态资源,并指定自己的样式。 4. Views:这部分包含了与ViewModel绑定的页面,以及UserControl,后者可以作为视图的一部分,用于拆分复杂界面或功能。例如,刷理智界面...

    标签栏测试

    此外,为了实现更复杂的动态添加或删除标签页的功能,可以编写方法来添加或移除`TabPage`实例,并确保更新相应的事件处理程序。 总的来说,“标签栏测试”可能是一个练习项目,旨在掌握C#中如何创建和管理用户界面...

Global site tag (gtag.js) - Google Analytics