由於某些原因,我在將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