由于某些原因,我在将ItemsSource
绑定到ObservableCollection
视图模型时让我的TabControl
正确显示。我正在根据这里找到的教程设计我的设计:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx。我确实在这里找到了像我这样的几个问题,但没有提到我的特殊情况。 这是我在xaml中的TabControl
。绑定TabControl ItemsSource到ViewModels的集合
<TabControl ItemsSource="{Binding Workspaces}"
SelectedIndex="{Binding ActiveWorkspaceIndex}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}"/>
其中ClosableTabItemTemplate
是以下内容。
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel Width="120">
<Button
Command="{Binding Path=CloseCommand}"
Content="X"
Cursor="Hand"
DockPanel.Dock="Right"
Focusable="False"
FontFamily="Courier"
FontSize="9"
FontWeight="Bold"
Margin="0,1,0,0"
Padding="0"
VerticalContentAlignment="Bottom"
Width="16" Height="16"
/>
<ContentPresenter
Content="{Binding Path=DisplayName}"
VerticalAlignment="Center"
/>
</DockPanel>
</DataTemplate>
Workspaces
是视图模型的ObservableCollection
。 ActiveWorkspaceIndex
只是我在视图模型中跟踪的活动工作空间索引。我通过我的App.xaml文件中的以下数据模板将视图模型与视图实例相关联。
<DataTemplate DataType="{x:Type vm:ViewModelStartPage}">
<v:ViewStartPage/>
</DataTemplate>
我只将一个视图模型添加到我的工作区集合中。我看到2个视图显示在选项卡控件中,并且它们不是选项卡。这几乎就像TabControl不知道将不同视图视为TabItems,它的行为更像一个堆栈面板,堆叠视图。如果我在代码中创建选项卡,它可以正常工作,如下所示:
System.Windows.Controls.TabItem i = new System.Windows.Controls.TabItem();
i.Content = new Views.ViewStartPage();
i.Header = "A Tab Item";
this.xTabControl.Items.Add(i);
我必须缺少一些内容模板或其他东西。我将在后期对标签进行样式设计,但现在我很乐意让基本标签工作。此外,选项卡内容中的视图可能会因每个选项卡而不同,因此我无法使用简单的文本块TabControl模板示例,我在各处看到... 即,不是这个...
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Content}" />
</DataTemplate>
任何想法?
我在一个测试项目中试过了你的代码,并且TabControl按照预期在这里工作。你可以发布“堆叠”TabControl的图像吗? – Sphinxxx
谢谢你试试看。我最终使用带有TabControl数据模板的ContentControl。这似乎解决了一些问题。老实说,我没有足够的经验来解释为什么这改变了事情,但现在它正在工作。我会发布我的工作代码。 – akagixxer