以下示例xaml使每个选项卡项共享相同的TextBox。这是有道理的,在某种程度上我猜...但它是意想不到的行为,几乎感觉就像一个bug。我在文档中找不到任何解释行为的信息,或者如何正确解决这个问题。
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem Name="tab1" />
<TabItem Name="tab2" />
</TabControl>
在tab1和tab2之间切换时,使用相同的TextBox,我希望每个标签都有一个新的TextBox。我怎样才能得到后一种情况?
对TabItem进行子类化并在默认情况下将其内容设置为TextBox是一种方法,但我只是想确保没有我缺少的东西。
修改
我意识到为每个选项卡显式设置内容将解决问题,但选项卡将动态创建。我想使用内容模板,以便我可以通过数据绑定添加新选项卡,并且内容不受共享,因为它会导致奇怪的行为。
也许使用TabControl的当前实现,没有声明方法来解决这个问题。在代码中设置内容非常简单,但在WPF中这样的事情总是感觉不对。对我来说,这似乎是TabControl的不合理优化;对于不实际的情况,它至少应该是可选的。
答案 0 :(得分:5)
我怀疑有一种更好的方法可以实现你想要实现的任何目标,但我认为这样可行(会测试但我在linux atm上):
<TabControl>
<TabControl.Resources>
<Style TargetType="TabItem" x:Shared="False">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBox />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem Name="tab1" />
<TabItem Name="tab2" />
</TabControl>
答案 1 :(得分:0)
如果您定义一个包含选项卡内容的usercontrol,它将起作用。我创建了以下usercontrol:
<UserControl x:Class="SO_Testing.TextBoxUC"
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="300" d:DesignWidth="300">
<Grid>
<TextBox/>
</Grid>
</UserControl>
然后我修改了我的窗口xaml:
<Window x:Class="SO_Testing.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SO_Testing"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl>
<TabItem Name="tab1" Header="Test">
<local:TextBoxUC/>
</TabItem>
<TabItem Name="tab2" Header="Test 2">
<local:TextBoxUC/>
</TabItem>
</TabControl>
</Grid>
</Window>
这可能不是您想要的,但至少每个选项卡的布局只在一个地方定义,然后您可以为每个用户控件分配一个datacontext,以显示每个选项卡的值。
答案 2 :(得分:0)
我有同样的问题,并发现这篇文章解释了为什么会发生这种情况以及如何解决它。这是链接,以防其他人遇到同样的问题:
http://www.codeproject.com/Articles/460989/WPF-TabControl-Turning-Off-Tab-Virtualization