Aus irgendeinem Grund habe ich eine Menge Zeit bekommen meine TabControl
ordnungsgemäß angezeigt, wenn die ItemsSource
zu einem ObservableCollection
von Ansicht Modelle binden. Ich stütze mein Design auf das hier gefundene Tutorial: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx. Ich habe ein paar Fragen wie meine hier gefunden, aber keine hat meine spezielle Situation angesprochen. Dies ist meine TabControl
in XAML.Binding TabControl ItemsSource zu Collection of ViewModels
<TabControl ItemsSource="{Binding Workspaces}"
SelectedIndex="{Binding ActiveWorkspaceIndex}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}"/>
Wo ClosableTabItemTemplate
ist das Folgende.
<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
ist die ObservableCollection
Sicht Modelle. ActiveWorkspaceIndex
ist nur der aktive Arbeitsbereichsindex, den ich im Ansichtsmodell verfolge. Ich verknüpfe mein Ansichtsmodell mit einer Instanz einer Ansicht über die folgende Datenvorlage in meiner App.xaml-Datei.
<DataTemplate DataType="{x:Type vm:ViewModelStartPage}">
<v:ViewStartPage/>
</DataTemplate>
Ich füge nur ein Ansichtsmodell zu meiner Sammlung von Arbeitsbereichen hinzu. Ich sehe 2 Ansichten in der Registerkarte angezeigt und sie sind nicht mit Registern. Es ist fast so, als ob das TabControl die verschiedenen Ansichten nicht als TabItems behandelt, sondern sich eher wie ein Stack-Panel verhält und die Views stapelt. Wenn ich die Registerkarte Elemente im Code erstellen, funktioniert es gut wie folgt:
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);
Ich muss einige Inhaltsvorlage oder etwas fehlen. Ich werde später meine Tabs gestalten, aber im Moment würde ich mich freuen, wenn ich nur die grundlegenden Tabs funktioniere. Auch die Ansichten in den Tab-Inhalten können für jede Registerkarte unterschiedlich sein, so dass ich nicht die einfachen TabControl-Vorlagen-Beispiele verwenden kann, die ich überall sehe ... I.e. nicht das ...
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Content}" />
</DataTemplate>
Irgendwelche Ideen?
Ich habe Ihren Code in einem Testprojekt versucht, und das TabControl funktioniert hier wie erwartet. Könntest du ein Bild von der "Stacking" TabControl posten? – Sphinxxx
Danke für den Versuch. Am Ende habe ich ein ContentControl mit einer TabControl-Datenvorlage verwendet. Dies schien die Dinge zu reparieren. Ehrlich gesagt bin ich nicht erfahren genug, um zu erklären, warum dies Dinge verändert hat, aber es funktioniert jetzt. Ich werde meinen Arbeitscode veröffentlichen. – akagixxer