首页 文章

如何在动态WPF选项卡控件的选项卡中添加关闭按钮

提问于
浏览
4

我有一个WPF标签控件..

我动态地在TabControl中添加标签

现在我想在Tab控件的每个Tab中给出一个关闭按钮..

所以请告诉我在该选项卡控件中添加关闭按钮 .

添加标签的代码

private void AddTab(ITabbedMDI mdiChild)
    {
       if (_mdiChildren.ContainsKey(mdiChild.UniqueTabName))
        {
            //user control is already opened in tab. 
            //So set focus to the tab item where the control hosted
            foreach (object item in tcMdi.Items)
            {
                TabItem ti = (TabItem)item;
                if (ti.Name == mdiChild.UniqueTabName)
                {
                    ucChildLoc = (UserControl)mdiChild;
                    ti.Focus();
                    //tcMdi.Width = this.ucChildLoc.Width;
                    //tcMdi.Height = this.ucChildLoc.Height;
                    break;
                }
            }
        }
   }

代码清算选项卡

private void CloseTab(ITabbedMDI tab, EventArgs e)
    {
        TabItem ti = null;
        foreach(TabItem item in tcMdi.Items)
        {
            if (tab.UniqueTabName == ((ITabbedMDI)item.Content).UniqueTabName)
            {
                ti = item;
                break;
            }
        }
        if (ti != null)
        {
            _mdiChildren.Remove(((ITabbedMDI)ti.Content).UniqueTabName);
            tcMdi.Items.Remove(ti);
        }
    }

我正在使用本文的TabControl

http://www.codeproject.com/Articles/32362/Tabbed-MDI-in-WPF

提前致谢..

3 回答

  • 3

    TabControl不提供关闭TabItems的功能 .

    您可以添加“x”按钮并将可见性设置为折叠/隐藏为黑客 .

    或者您可以查看Infragistics的XamTabControl或支持关闭Tabs的任何其他供应商产品 .

  • 5

    如果您将选项卡控件作为自定义控件并从选项卡控件继承功能,然后添加关闭按钮并处理其事件,那么它可以工作

    <UserControl x:Class="CloseableHeader"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="23" d:DesignWidth="81" Margin="0">
    <Grid>
      <Button Content="X"  Height="19" HorizontalAlignment="Right" Margin="0,3,4,0" 
          Name="button_close" VerticalAlignment="Top" Width="20" FontFamily="Courier" 
          FontWeight="Bold" Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}" 
          FontStretch="Normal" Visibility="Visible" 
          FontSize="14" Padding="0" ToolTip="Close"/>
      <Label Content="TabItem"  Height="23" HorizontalAlignment="Left" 
          Margin="4,1,0,0" Name="label_TabTitle" VerticalAlignment="Top" 
          FontFamily="Courier" FontSize="12" />
    </Grid>
    
    class ClosableTab : TabItem
         {
            // Constructor
          public ClosableTab()
          {
             // Create an instance of the usercontrol
             closableTabHeader = new CloseableHeader();
             // Assign the usercontrol to the tab header
             this.Header = closableTabHeader;
           }
        }
    

    有关详细信息,请参阅本文http://www.codeproject.com/Articles/84213/How-to-add-a-Close-button-to-a-WPF-TabItem这可能会有所帮助

  • 1

    我尝试了几种解决方案,并努力寻找看起来不错的东西,并在鼠标悬停时突出显示按钮中的“X” . 我终于以这一个结束了 . 它也不需要太多代码 . 我希望它有所帮助:

    enter image description here

    <TabControl>
            <TabItem>
                <TabItem.Header>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0">Output</TextBlock>
                        <Button Grid.Column="1" Name="button_close" Click="button_close_Click">
                      <Button.Template>
                                <ControlTemplate TargetType="Button">
                                    <Path Data="M0,0 L8,8 M8,0 L0,8" StrokeThickness="3" VerticalAlignment="Center" Margin="5,4,0,2">
                                        <Path.Style>
                                            <Style TargetType="{x:Type Path}">
                                                <Style.Triggers>
                                                    <Trigger Property="IsMouseOver" Value="False">
                                                        <Setter Property="Stroke" Value="LightGray" />
                                                    </Trigger>
                                                    <Trigger Property="IsMouseOver" Value="True">
                                                        <Setter Property="Stroke" Value="Black" />
                                                    </Trigger>
                                                </Style.Triggers>
                                            </Style>
                                        </Path.Style>
                                    </Path>
                                </ControlTemplate>
                            </Button.Template>
                        </Button>
                    </Grid>
    
    
                </TabItem.Header>
             <TabItem.Content>
             </TabItem.Content>
    

相关问题