TemplateBindig ExpanderHeader



  • Hallo

    Habe mir einen Style für einen Expander erstellt. Hier passe ich auch das HeaderTemplate an. Im Expander selber möchte ich nun aber gerne den Headertext mit übergeben. Nun weiß ich nicht in welcher Property ich die übergeben kann.

    Hier mein Code. An den 4 Fragezeichen fehlt mir nun das besagte.

    <Style TargetType="Expander">
       <Setter Property="IsExpanded" Value="True" />
       <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <DockPanel Width="{TemplateBinding ActualWidth}"
                               Height="Auto"
                               Margin="10"
                               HorizontalAlignment="Stretch"
                               VerticalAlignment="Stretch">
    
                                  <TextBlock Margin="0"
                                             DockPanel.Dock="Left"
                                             Text="{TemplateBinding ???? }" />
                                  <Separator Margin="10,0,0,0" DockPanel.Dock="Right" />
                     </DockPanel>
                 </DataTemplate>
              </Setter.Value>
        </Setter>
     </Style>
    
    <Expander ???? ="MeinHeaderText">
    <!-- Inhalt -->
    </Expander>
    

    Weiß mir jemand Rat.



  • DataContext als Hammer-Lösung (Hammer im Sinne von: When you have a hammer, all problems start to look like nails.) Dann musst du aber den Bindungstyp ändern, anstelle von TemplateBinding müsstest du direkt Binding verwenden. (DataContext "vererbt sich", wenn bei einem Control nicht gesetzt, dann wird dasjenige vom Vater genommen)

    Alternativ ein attached Property verwenden.



  • Ich versteh nur Bahnhof. Sorry.



  • Hi,

    du kannst folgendes Binding benutzen:

    <TextBlock Margin="0"
    DockPanel.Dock="Left"
    Text="{Binding RelativeSource={RelativeSource AncestorType=Expander}, Path=Header}" />
    

    und setzt beim Expander den Header:

    <Expander  Header="MeinHeaderText">
    

    mfG
    KaPtainCugel



  • Danke. Habs nun auch schon gefunden.

    Aber es geht auch so:

    <TextBlock Margin="0"
    DockPanel.Dock="Left"
    Text="{Binding}" />
    
    <Expander  Header="MeinHeaderText">
    

Anmelden zum Antworten