标签: tabcontrol

带有添加新标签按钮的TabControl(+)

在WPF中选项卡控件的选项卡条中的所有选项卡项末尾添加"+"按钮选项卡的正确方法是什么?

  1. 它应该与多个选项卡标题行一起正常工作.
  2. 它应该在所有标签项的末尾
  3. 选项卡循环应该正常工作(Alt+ Tab),也就是说,+应该跳过选项卡.
  4. 我不应该修改我绑定的源集合.也就是说,控件应该是可重用的.
  5. 该解决方案应该适用于MVVM

在此输入图像描述

在此输入图像描述

更确切地说,按钮应该完全显示为附加的最后一个选项卡,而不是作为所有选项卡条行右侧某处的单独按钮.

我只是在寻找这样做的一般方法.

谷歌抛出了许多例子,但是如果你深入挖掘它们,它们都不能满足上述五点.

wpf tabs tabcontrol button

46
推荐指数
3
解决办法
3万
查看次数

如何在WPF中构建垂直制表集?

如何在WPF中构建垂直制表集?选项卡将从顶部到底部堆叠,就像visual studio中显示的项目的"属性"一样.

wpf tabcontrol

46
推荐指数
3
解决办法
3万
查看次数

在WPF TabControl中隐藏选项卡标题

当只有一个可见标签时,隐藏标题页眉的最佳方法是什么?

我想完全隐藏TabControl chrome,同时保持Tab的内容可见.

wpf tabcontrol

40
推荐指数
1
解决办法
3万
查看次数

如何在TabControl中的选项卡项中保留控件状态

我是WPF的新手,试图建立一个项目,该项目遵循Josh Smith描述模型 - 视图 - 视图模型设计模式的优秀文章的建议.

使用Josh的示例代码作为基础,我创建了一个包含许多"工作区"的简单应用程序,每个工作区由TabControl中的选项卡表示.在我的应用程序中,工作空间是一个文档编辑器,它允许通过TreeView控件操作分层文档.

虽然我已成功打开多个工作区并在绑定的TreeView控件中查看其文档内容,但我发现TreeView在选项卡之间切换时"忘记"其状态.例如,如果Tab1中的TreeView部分展开,则在切换到Tab2并返回到Tab1后,它将显示为完全折叠.此行为似乎适用于所有控件的控件状态的所有方面.

经过一些实验,我意识到我可以通过将每个控件状态属性显式绑定到底层ViewModel上的专用属性来保留TabItem中的状态.然而,这似乎是很多额外的工作,当我只是希望我的所有控件在工作区之间切换时记住它们的状态.

我想我错过了一些简单的东西,但我不知道在哪里寻找答案.任何指导都将非常感谢.

蒂姆,谢谢

更新:

根据要求,我将尝试发布一些演示此问题的代码.但是,由于作为TreeView基础的数据很复杂,我将发布一个展示相同symtoms的简化示例.这是主窗口中的XAML:

<TabControl IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Path=Docs}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <ContentPresenter Content="{Binding Path=Name}" />
        </DataTemplate>
    </TabControl.ItemTemplate>

    <TabControl.ContentTemplate>
        <DataTemplate>
            <view:DocumentView />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

上面的XAML正确绑定到DocumentViewModel的ObservableCollection,其中每个成员都通过DocumentView呈现.

为了简化这个例子,我从DocumentView中删除了TreeView(如上所述),并将其替换为包含3个固定标签的TabControl:

<TabControl>
    <TabItem Header="A" />
    <TabItem Header="B" />
    <TabItem Header="C" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,DocumentView和DocumentViewModel之间没有绑定.运行代码时,内部TabControl在切换外部TabControl时无法记住其选择.

但是,如果我显式绑定内部TabControl的SelectedIndex属性...

<TabControl SelectedIndex="{Binding Path=SelectedDocumentIndex}">
    <TabItem Header="A" />
    <TabItem Header="B" />
    <TabItem Header="C" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)

...到DocumentViewModel上的相应虚拟属性...

public int SelecteDocumentIndex { get; set; }
Run Code Online (Sandbox Code Playgroud)

...内部标签能够记住它的选择.

我知道我可以通过将这种技术应用到每个控件的每个视觉属性来有效地解决我的问题,但我希望有一个更优雅的解决方案.

wpf binding state tabcontrol mvvm

38
推荐指数
2
解决办法
3万
查看次数

WPF TabItem标题样式

我正在尝试设置一个TabControl并且有75%的方式,但是我很难设计实际的TabItems:

替代文字

我想要实现的是删除默认的ContentPresenter,以便我可以使用圆角边缘使标签项部分透明,而不是我现在拥有的红色和绿色的占位符.

我敢肯定它可能并不那么困难,但我无法弄清楚所以任何帮助都会非常感激!

到目前为止,这是TabControl的XAML:

<TabControl TabStripPlacement="Left" HorizontalAlignment="Stretch" BorderBrush="#41020202">
  <TabControl.BitmapEffect>
    <DropShadowBitmapEffect Color="Black" Direction="270"/>
  </TabControl.BitmapEffect>  
  <TabControl.Resources>    
    <Style TargetType="{x:Type TabItem}">
      <Setter Property="BorderThickness" Value="0"/>      
      <Setter Property="Padding" Value="0" />      
      <Setter Property="HeaderTemplate">        
        <Setter.Value>          
          <DataTemplate>        
            <Border x:Name="grid" Background="Red">
              <ContentPresenter>
                <ContentPresenter.Content>
                  <TextBlock Margin="4" FontSize="15" Text="{TemplateBinding Content}"/>
                </ContentPresenter.Content>             
                <ContentPresenter.LayoutTransform>                
                  <RotateTransform Angle="270" />              
                </ContentPresenter.LayoutTransform>            
              </ContentPresenter>  
            </Border>        
            <DataTemplate.Triggers>
              <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type TabItem}},Path=IsSelected}" Value="True">
                <Setter TargetName="grid" Property="Background" Value="Green"/>
              </DataTrigger>
            </DataTemplate.Triggers>
          </DataTemplate>        
        </Setter.Value>      
      </Setter>    
    </Style>  
  </TabControl.Resources>
  <TabControl.Background>
    <RadialGradientBrush Center="-0.047,0.553" GradientOrigin="-0.047,0.553" RadiusY="1.231" RadiusX="0.8">
      <GradientStop Offset="1" Color="#06FFFFFF"/>
      <GradientStop Color="#14FFFFFF"/>
    </RadialGradientBrush>
  </TabControl.Background>  
  <TabItem Header="Tab Item …
Run Code Online (Sandbox Code Playgroud)

wpf xaml styles tabcontrol header

37
推荐指数
2
解决办法
11万
查看次数

Hiding and Showing TabPages in tabControl

I am trying to show or hide tabpages as per user choice. If user selects gender male then form for male in a tabpage "male" should be displayed and if user selects female then similar next form should be displayed in next tab "female"

I tried using

tabControl1.TabPages.Remove(...)
Run Code Online (Sandbox Code Playgroud)

and

tabControl1.TabPages.Add(...)
Run Code Online (Sandbox Code Playgroud)

It adds and removes the tabpages but doing so will loose my controls on tabpages too... i can't see them back. what's the problem here?

vb.net tabcontrol tabpage

35
推荐指数
4
解决办法
13万
查看次数

如何以编程方式选择WPF TabControl中的TabItem

我想知道如何在WPF TabControl中选择特定的TabItem.

我尝试过这些但是没有用!

MyTabControl.SelectedIndex = x

MyTabControl.SelectedItem = MyTabItem

MyTabControl.SelectedValue = MyTabItem

MyTabItem.IsSelected = True
Run Code Online (Sandbox Code Playgroud)

wpf tabcontrol tabitem

35
推荐指数
5
解决办法
5万
查看次数

隐藏TabControl标头

什么是编程方式(即不使用此问题中的样式,但使用代码)来隐藏TabControl标题?我会很高兴看到一个片段.

c# wpf tabs tabcontrol

34
推荐指数
4
解决办法
5万
查看次数

停止TabControl重新创建其子项

我有一个IList绑定到a的viewmodels TabControl.这IList不会改变整个生命周期TabControl.

<TabControl ItemsSource="{Binding Tabs}" SelectedIndex="0" >
    <TabControl.ItemContainerStyle>
        <Style TargetType="TabItem">
            <Setter Property="Content" Value="{Binding}" />
        </Style>
    </TabControl.ItemContainerStyle>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

每个viewmodel都有一个DataTemplate在a中指定的ResourceDictionary.

<DataTemplate TargetType={x:Type vm:MyViewModel}>
    <v:MyView/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

DataTemplate中指定的每个视图都是资源密集型的,足以创建我只想创建每个视图一次,但是当我切换选项卡时,会调用相关视图的构造函数.从我所读到的,这是预期的行为TabControl,但我不清楚调用构造函数的机制是什么.

我已经看过一个使用UserControls 的类似问题,但是那里提供的解决方案需要我绑定到不受欢迎的视图.

c# wpf tabcontrol datatemplate mvvm

34
推荐指数
3
解决办法
1万
查看次数

WPF:TabControl和DataTemplates

我只是想了解以下场景.我在哪里实施一个<TabControl>绑定ObservableCollection<TabViewModel>

没有数据模板

当我没有任何DataTemplates时,文本WpfApplication1.TabViewModel显示在选项卡标题和内容中.好的,我理解这一部分.

只是 ItemTemplate

当我有

<TabControl.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding TabTitle}" />
        </StackPanel>
    </DataTemplate>
</TabControl.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

然后填充了我的标题页眉.标签内容仍然是WpfApplication1.TabViewModel.

只是 DataTemplate

当我在我的下面有我的 <Window.Resources>

<DataTemplate DataType="{x:Type local:TabViewModel}">
    <TextBox Text="{Binding Text}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

该模板填充了标题页眉.

如果我ItemTemplate同时DataTemplate填写选项卡内容,则填充选项卡标题.为何所有这些差异.ItemTemplate&DataTemplate填满的标签标头如果对方是不存在.如果两者都存在,ItemTemplate则在DataTemplate填充内容时填充标题.

虽然我有事情可行,但我很困惑.不<TabControl.HeaderTemplate>应该是填充标题和<TabControl.ItemTemplate>填写内容的东西吗?

wpf tabcontrol datatemplate

32
推荐指数
1
解决办法
2万
查看次数

标签 统计

tabcontrol ×10

wpf ×9

c# ×2

datatemplate ×2

mvvm ×2

tabs ×2

binding ×1

button ×1

header ×1

state ×1

styles ×1

tabitem ×1

tabpage ×1

vb.net ×1

xaml ×1