C# 如何更改滚动WPF TabControl中TabItems的外观?
我有一个滚动选项卡控件,使用ScrollViewer和StackPanel(StackPanel设置为IsItemsHost=“true”)。首先,我从最初在这里概述的解决方案开始工作-。目前它已经断开了链接(编辑:我在这里的一个论坛中找到了他的一个代码实例),因此这里是TabControl的xaml(不需要任何进一步的代码):C# 如何更改滚动WPF TabControl中TabItems的外观?,c#,wpf,xaml,tabcontrol,itemtemplate,C#,Wpf,Xaml,Tabcontrol,Itemtemplate,我有一个滚动选项卡控件,使用ScrollViewer和StackPanel(StackPanel设置为IsItemsHost=“true”)。首先,我从最初在这里概述的解决方案开始工作-。目前它已经断开了链接(编辑:我在这里的一个论坛中找到了他的一个代码实例),因此这里是TabControl的xaml(不需要任何进一步的代码): 如何调整每个选项卡项的外观?例如,我想在StackPanel的帮助下,在每个TabItem中放置一个TextBox和TextBlock,这样我就可以有可重命名的选项
如何调整每个选项卡项的外观?例如,我想在StackPanel的帮助下,在每个TabItem中放置一个TextBox和TextBlock,这样我就可以有可重命名的选项卡(根据需要折叠其中一个)。我可能还想在每个选项卡上添加一个关闭按钮。通常,我会使用以下内容:
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel Name="panel" Orientation="Horizontal">
<TextBox Name="editHeader" Text="{Binding Header}" MaxWidth="250"/>
<TextBlock Name="textHeader" Text="{Binding Header}" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
。。但这根本没有效果。任何想法都将不胜感激。谢谢
编辑:我仍在努力解决这个问题。解决方案是否可能涉及ContentPresenter和/或SelectedContentTemplate
编辑2:(这并没有增加我的问题的价值)我真的,真的希望WPF包括一些这种开箱即用的东西。TabControl的默认行为,以及几年后没有可滚动的TabControl(也没有简单的解决方案)这一事实,让我感到困惑。嘿,猜猜看。我也做过类似的事情,不过我是根据这个系列来做的 所使用的方法是简单地设置tabitems模板的样式。例如:
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<!-- your custom template goes here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
不幸的是,这种方法意味着您必须完全重新定义选项卡项的外观和行为方式。但提供的链接提供了如何实现这一点的好例子
希望有帮助。嘿,猜猜看。我也做过类似的事情,不过我是根据这个系列来做的 所使用的方法是简单地设置tabitems模板的样式。例如:
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<!-- your custom template goes here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
不幸的是,这种方法意味着您必须完全重新定义选项卡项的外观和行为方式。但提供的链接提供了如何实现这一点的好例子
希望有帮助。只是一个想法
您是否尝试过将文本块添加到TabItem.Header中?如果您这样做而不是模板,它可能会工作。过去对我来说只是一个想法
您是否尝试过将文本块添加到TabItem.Header中?如果您这样做而不是模板,它可能会工作。对于我来说,在过去我想我已经做到了(尽管仍然有点交叉手指——我还没有处理TextBlock和TextBox的可见性以进行重命名)
这与Val的解决方案类似,因为我在其TabItem上使用TabControl.Resources,但相关的属性是HeaderTemplate,我只是覆盖DataTemplate中的ContentPresenter。(避免替换\破坏TabControl免费提供的许多良好行为的措施)
我有点像WPF新手,所以这基本上是我在谷歌搜索中不断尝试的结果。对于那些感兴趣的人来说,这个链接(关于StackOverflow)最终对我帮助最大-我想我已经得到了它(尽管仍然有点交叉手指——我还没有处理TextBlock与TextBox的可见性以进行重命名)
这与Val的解决方案类似,因为我在其TabItem上使用TabControl.Resources,但相关的属性是HeaderTemplate,我只是覆盖DataTemplate中的ContentPresenter。(避免替换\破坏TabControl免费提供的许多良好行为的措施)
我有点像WPF新手,所以这基本上是我在谷歌搜索中不断尝试的结果。对于那些感兴趣的人来说,这个链接(在StackOverflow上)最终对我帮助最大-我还没有将TabItems绑定到标题(使用Text=“{Binding Header}”--无论出于什么原因,它都不起作用),但它对TabItems的样式有着明显的影响,因此这可能是一个有希望的角度。你知道为什么绑定到标题会失败吗?我现在明白你说我必须重新定义tabitems的方式是什么意思了
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter>
<ContentPresenter.Content>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{TemplateBinding Content}"/>
<TextBox Text="{TemplateBinding Content}"/>
</StackPanel>
</ContentPresenter.Content>
</ContentPresenter>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>