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

更确切地说,按钮应该完全显示为附加的最后一个选项卡,而不是作为所有选项卡条行右侧某处的单独按钮.
我只是在寻找这样做的一般方法.
谷歌抛出了许多例子,但是如果你深入挖掘它们,它们都不能满足上述五点.
如何在WPF中构建垂直制表集?选项卡将从顶部到底部堆叠,就像visual studio中显示的项目的"属性"一样.
当只有一个可见标签时,隐藏标题页眉的最佳方法是什么?
我想完全隐藏TabControl chrome,同时保持Tab的内容可见.
我是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)
...内部标签能够记住它的选择.
我知道我可以通过将这种技术应用到每个控件的每个视觉属性来有效地解决我的问题,但我希望有一个更优雅的解决方案.
我正在尝试设置一个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) 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?
我想知道如何在WPF TabControl中选择特定的TabItem.
我尝试过这些但是没有用!
MyTabControl.SelectedIndex = x
MyTabControl.SelectedItem = MyTabItem
MyTabControl.SelectedValue = MyTabItem
MyTabItem.IsSelected = True
Run Code Online (Sandbox Code Playgroud) 什么是编程方式(即不使用此问题中的样式,但使用代码)来隐藏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 的类似问题,但是那里提供的解决方案需要我绑定到不受欢迎的视图.
我只是想了解以下场景.我在哪里实施一个<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>填写内容的东西吗?