2016-08-11 3 views
0

Ich versuche, Stil auf mehrere Expander anzuwenden, die ein ähnliches Aussehen und Funktionalität haben. Aber das Problem ist, dass, wenn ich Expander.Content style, nur einer von vielen Inhalt haben wird und der Rest alle leer sind.Expander.Content nur auf einen angewendet

enter image description here

Minimal Beispiel:

<Style TargetType="Expander" BasedOn="{StaticResource {x:Type Expander}}"> 
    <Setter Property="Header"> 
     <Setter.Value> 
      Header 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Content"> 
     <Setter.Value> 
      <TextBlock Text="1"/> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!-- .... --> 

<Expander Grid.Row="0"/> 
<Expander Grid.Row="1"/> 
<Expander Grid.Row="2"/> 

, da Sie nur die zweite Reihe zu sehen Inhalt hat (1) während der Entwurfszeit. Während der Laufzeit hat nur der letzte Expander den Inhalt (1).

Wenn ich auf den ersten Expander klicke, wird der Inhalt (1) des dritten Expanders tatsächlich zum ersten Expander verschoben.

Warum passiert das? Und wie man es repariert?

Antwort

1

Stile erstellen nur eine Instanz, die für visuelle Elemente nur das Kind eines einzelnen Elternteils sein kann. Stellen Sie die ContentTemplate anstelle der Content direkt ein. (Vorlagen beschreiben nur, was von dem Steuerelement erstellt wird, das es verwendet, damit es gemeinsam genutzt werden kann.)

+0

Warum erstellt Header 3 Instanzen, aber nur eine für Inhalt? – Steve

+0

@Steve: Weil Sie es auf den String '" Header "' setzen, was kein * visuelles Element * ist (im Gegensatz zum 'TextBlock'). –

+0

also erstellen alle Stile nur eine Instanz und teilen sie über alle Elemente, für die sie gilt. Und wenn ich ein visuelles Element innerhalb des Stils verwenden möchte, aber dass sie zwischen den Elementen unterschiedlich sein sollen, dann benutze das Template. Habe ich richtig verstanden – Steve

Verwandte Themen