| 

.NET C# Java Javascript Exception

1
Ich habe in den weiten des Internets einen Style für ein WPF-TabControl mit Closeable-Tabs gefunden. Diesen habe ich nun insofern verändert, als das ich ein TabControlExt von TabControl ableite. So weit, so gut.

Jetzt wurden aber auch noch die TabItems umgestyled. Und mein Problem ist, das mein TabControlExt nach wie vor mit TabItems arbeitet, diese aber den Standard-Style benutzen, anstatt den Neuen mit dem Schließen-Button.

Und ich habe nicht den Hauch eines Schimmers, wie ich WPF das beibringen kann, ohne direkt in den Window-Ressourcen den TabItemStyle festzulegen. Ich hoffe, das ist einigermassen verständlich :)

Dies hier ist ein kleiner Auszug aus dem TabItem-Style.
<!-- The Style for TabItems (strips). -->
<Style TargetType="{x:Type TabItem}" x:Key="TabItemExt">
<Setter Property="FocusVisualStyle" Value="{StaticResource TabItemFocusVisual}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<!-- The Grid helps defining the general height of TabItems. -->
<Grid Height="35" VerticalAlignment="Bottom">


Wie würde ich jetzt das TabControlExt dazu bringen, DIESEN Style zu benutzen?
Mit
DefaultStyleKeyProperty.OverrideMetadata(typeof(TabControlExt), new FrameworkPropertyMetadata(typeof(TabControlExt)));
komme ich nicht so recht weiter. Für das TabConrol selbst nutze ich das. Aber ob mir das für mein Anliegen hilft....
Das einzige, das ich am TabControl erweitert habe, ist eben ein CloseCommand mit einem RoutedEvent um das Schließen eines Tabs als Event auszulösen. Ansonsten sind die Änderungen fast nur optischer Natur.

PS: Man sollte so fair sein und die Quelle angeben: WPF TabControl Series Part 4
05.07.2011
Jens Duczmal 2,6k 1 3 9
Jens Duczmal 2,6k 1 3 9
1 Antwort
1
Ich hab's selbst rausgefunden :)

Man erstelle zusätzlich ein vererbtes Control "TabItemExt" wie folgt:
public class TabItemExt : TabItem {
static TabItemExt() {
DefaultStyleKeyProperty.OverrideMetadata(typeof(TabItemExt), new FrameworkPropertyMetadata(typeof(TabItemExt)));
}
}


Und im TabControlExt überschreiben wir folgende Methoden:
protected override DependencyObject GetContainerForItemOverride() {
return new TabItemExt();
}

protected override bool IsItemItsOwnContainerOverride(object item) {
return item is TabItemExt;
}


Diese scheinen zur Folge zu haben, das als Items keine TabItems sondern automatisch TabItemsExt genommen werden. Und für diese haben wir ja unseren Style.

Abschliessend muss dann im Style noch eingetragen werden, das jetzt nicht mehr das TabItem sondern das TabItemExt gestyled wird.

<!-- The Style for TabItems (strips). -->
<Style TargetType="{x:Type TabItemExt}">
05.07.2011
Jens Duczmal 2,6k 1 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH