WPF之TabControl——TabItem纵向显示

一、首先我们看一下TabItem横向显示的效果,如下:

XAML:

        <TabControl Style="{StaticResource TabControlStyle}">
            <TabItem Style="{StaticResource TabItemStyle}" Header="测试">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="测试数据一" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Column="1" Text="{Binding TestOne}" HorizontalContentAlignment="Center"  VerticalContentAlignment="Center" Height="30" Margin="5" ></TextBox>
                    <TextBlock Grid.Row="1" Text="测试数据二" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding TestTwo}" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Height="30" Margin="5" ></TextBox>
                </Grid>
            </TabItem>
            <TabItem Style="{StaticResource TabItemStyle}" Header="试验">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="试验数据一" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Column="1" Text="{Binding LabOne}" Height="30" Margin="5" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"></TextBox>
                    <TextBlock Grid.Row="1" Text="试验数据二" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding LabTwo}"   HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="30" Margin="5" ></TextBox>
                </Grid>
            </TabItem>
        </TabControl>

二、接着我们看一下TabItem纵向显示的效果,如下:

(1)先建立一个TabItemConverter:

public class TabItemConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string str = value.ToString();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.Length; i++)
            {
                if (i < (str.Length - 1))
                {
                    sb.Append(str[i]);
                    sb.Append("\n");
                }
                else
                {
                    sb.Append(str[i]);
                }
            }
            return sb.ToString();
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

(2)在ResourceDictionary中引用TabItemConverter :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib"
                    xmlns:shell="clr-                    namespace:System.Windows.Shell;assembly=PresentationFramework"
                    xmlns:converts="clr-namespace:StyleWpf.Converts">

    <converts:TabItemConverter x:Key="TabItemConverter"></converts:TabItemConverter>


    <!--此处省略N行-->


    <!--文字竖排-->
    <Style x:Key="TabItemVerticalStyle" TargetType="TabItem">
        <Setter Property="Width" Value="35"></Setter>
        <Setter Property="Height" Value="Auto"></Setter>
        <Setter Property="Margin" Value="0"></Setter>
        <Setter Property="FontWeight" Value="SemiBold"></Setter>
        <Setter Property="FontSize" Value="14"></Setter>
        <Setter Property="FontFamily" Value="Microsoft YaHei"></Setter>
        <Setter Property="Foreground" Value="LightBlue"></Setter>
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBlock Text="{Binding Path=Header, RelativeSource={RelativeSource AncestorType=TabItem},Converter={StaticResource TabItemConverter}}"></TextBlock>
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TabItem">
                    <Grid>
                        <Border Name="Border" Background="Transparent" BorderThickness="0,0,2,0"   
                                Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path= Width}"  
                                Height="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path= Height}">
                            <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" RecognizesAccessKey="True">
                            </ContentPresenter>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="Border" Property="BorderBrush" Value="Blue"/>
                            <Setter Property="Foreground" Value="Black"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>

(3)XAML前端代码如下:

        <TabControl Grid.Column="3" Style="{StaticResource TabControlStyle}" TabStripPlacement="Left">
            <TabItem Style="{StaticResource TabItemVerticalStyle}" Header="测试">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="测试数据一" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Column="1" Text="{Binding TestOne}" HorizontalContentAlignment="Center"  VerticalContentAlignment="Center" Height="30" Margin="5" ></TextBox>
                    <TextBlock Grid.Row="1" Text="测试数据二" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding TestTwo}" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Height="30" Margin="5" ></TextBox>
                </Grid>
            </TabItem>
            <TabItem Style="{StaticResource TabItemVerticalStyle}" Header="试验">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <TextBlock Text="试验数据一" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Grid.Column="1" Text="{Binding LabOne}" Height="30" Margin="5" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"></TextBox>
                    <TextBlock Grid.Row="1" Text="试验数据二" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
                    <TextBox Text="{Binding LabTwo}" Grid.Row="1" Grid.Column="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="30" Margin="5" ></TextBox>
                </Grid>
            </TabItem>
        </TabControl>

https://blog.csdn.net/whshiyun/article/details/78070328

备注:看了以上链接自己写了一个。第一次写,没什么经验,有什么错误,欢迎大家指正,谢谢--------每天进步一点点。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WPF TabControl是一种常用的控件,用于在应用程序中创建多个选项卡。每个选项卡由TabItem表示,可以通过TabItem的Header属性设置选项卡的标题。 要给TabItem动态添加事件,可以使用以下步骤: 1. 在XAML中创建TabControl和一些初始化的TabItem。 2. 在代码中订阅TabControl的SelectionChanged事件。 3. 在该事件处理程序中,获取当前选中的TabItem。 4. 使用AddHandler方法为选中的TabItem添加所需的事件处理程序。 以下是实现的示例代码: XAML部分: ```XAML <TabControl x:Name="myTabControl" SelectionChanged="TabControl_SelectionChanged"> <TabItem Header="选项卡1" /> <TabItem Header="选项卡2" /> </TabControl> ``` C#部分: ```C# private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { // 获取当前选中的TabItem TabItem selectedTabItem = (TabItem)myTabControl.SelectedItem; // 为选中的TabItem添加事件处理程序 selectedTabItem.AddHandler(Button.ClickEvent, new RoutedEventHandler(TabItem_ButtonClick)); } private void TabItem_ButtonClick(object sender, RoutedEventArgs e) { // 处理选中的TabItem的按钮点击事件 MessageBox.Show("点击了选项卡的按钮!"); } ``` 上述代码中,我们首先在XAML中创建了一个TabControl和两个TabItem,并为TabControl的SelectionChanged事件指定事件处理程序。 在事件处理程序中,我们首先获取当前选中的TabItem,然后使用AddHandler方法为其按钮的Click事件添加了一个事件处理程序。 在TabItem_ButtonClick方法中,我们可以处理选中的TabItem的按钮点击事件,并在此处显示了一个消息框,以示例展示处理逻辑。 通过上述步骤可实现给WPF TabControl的TabItem动态添加事件的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值