以下示例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>
Run Code Online (Sandbox Code Playgroud)
当在tab1和tab2之间切换时,使用相同的TextBox,当我期望每个选项卡有一个新的TextBox时.我怎样才能得到后一种情况?
对TabItem进行子类化并将其内容默认设置为TextBox是一种方法,但我只是想确保没有我遗漏的东西.
编辑
我意识到为每个选项卡显式设置内容将解决问题,但选项卡将动态创建.我想使用内容模板,以便我可以通过数据绑定添加新选项卡,并使内容不共享,因为它会导致奇怪的行为.
也许使用TabControl的当前实现,没有声明方法来解决这个问题.在代码中设置内容非常简单,但在WPF中这样的事情总是感觉不对.对我来说,这似乎是TabControl的不合理优化; 对于不实用的情况,它至少应该是可选的.
我正在尝试使用C#中的WPF为当前项目创建GUI。我希望有一个选项卡(在运行时动态创建),每个选项卡都应打开一个具有相同列标题但内容不同的表。
我知道我可以实现如下标签和表格:
<Grid>
<TabControl x:Name="tabControl" TabStripPlacement="Left">
<TabItem Header="Example 1" x:Name="tabItem" >
<DataGrid ItemsSource="{Binding TagCollection.Tags}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Tag" Binding="{Binding Tag}" />
<DataGridTextColumn Header="Description" Binding="{Binding Description}" />
<DataGridTextColumn Header="Value" Binding="{Binding Value}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Header="Example 2" x:Name="tabItem1" >
<DataGrid ItemsSource="{Binding TagCollection.Tags}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Tag" Binding="{Binding Tag}" />
<DataGridTextColumn Header="Description" Binding="{Binding Description}" />
<DataGridTextColumn Header="Value" Binding="{Binding Value}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
</TabControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我该如何生成带有代码的视图?我还不熟悉绑定之类的东西,所以也许有人可以给我看一个简短的例子?
谢谢KatZe