Über x:key festgelegten Style innerhalb eines DataTemplates verwenden

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Über x:key festgelegten Style innerhalb eines DataTemplates verwenden

    Guten Morgen,

    ich habe folgendes Szenario:

    XML-Quellcode

    1. <ListBox Style="{DynamicResource Hauptmenü}" ItemsSource="{Binding Meine4Viewmodels}" SelectionMode="Single" IsSynchronizedWithCurrentItem="True">
    2. <ListBox.ItemTemplate>
    3. <DataTemplate>
    4. <Canvas Grid.Column="1" Name="icoContent" Style="{StaticResource Navigationssymbol}" Width="32" Height="32" VerticalAlignment="Center" HorizontalAlignment="Center">
    5. <Path Fill="{DynamicResource VordergrundfarbeBrush}" Data="{Binding Icon}"/>
    6. </Canvas>
    7. </DataTemplate>
    8. </ListBox.ItemTemplate>
    9. </ListBox>


    Ich möchte, dass der Style x:Key=HauptmenüItem, den ich in der Application.xaml für ListboxItems angelegt habe, in den Items dieser Listbox angewendet wird. Wo bzw. wie bringe ich das unter?
    Hallo

    Der Style greift nicht da du das ItemTemplate überschreibst.
    Zeig mal das Style bzw. solltest du den Style für den Typ Canvas erstellen. (Was übrigens ein ganz dummes control ist und gerade in ListItems recht ungut da es bei mir schon oftmals zu Problemen geführt hat. Erwäge hier gleich am besten eine alternative.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    XML-Quellcode

    1. ​<Style TargetType="{x:Type ListBoxItem}" x:Key="HauptmenüItem">
    2. <Setter Property="MinHeight" Value="75"/>
    3. <Setter Property="Template">
    4. <Setter.Value>
    5. <ControlTemplate TargetType="ListBoxItem">
    6. <Border Name="_Border"
    7. Padding="1"
    8. SnapsToDevicePixels="true">
    9. <ContentPresenter />
    10. </Border>
    11. <ControlTemplate.Triggers>
    12. <Trigger Property="IsSelected" Value="true">
    13. <Setter TargetName="_Border" Property="Background" Value="Transparent"/>
    14. <Setter Property="Foreground" Value="{DynamicResource VordergrundfarbeBrush}"/>
    15. <Setter TargetName="_Border" Property="BorderThickness" Value="10, 0, 0, 0"/>
    16. <Setter TargetName="_Border" Property="BorderBrush" Value="{DynamicResource VordergrundfarbeBrush}"/>
    17. </Trigger>
    18. <Trigger Property="IsMouseOver" Value="True">
    19. <Setter TargetName="_Border" Property="BorderThickness" Value="1"/>
    20. <Setter TargetName="_Border" Property="BorderBrush" Value="{DynamicResource VordergrundfarbeBrush}"/>
    21. </Trigger>
    22. </ControlTemplate.Triggers>
    23. </ControlTemplate>
    24. </Setter.Value>
    25. </Setter>
    26. </Style>


    Nofear23m schrieb:

    Der Style greift nicht da du das ItemTemplate überschreibst.


    Es kann ja auch gar nicht greifen, weil es zwar in der Application.xaml mittels x:Key festgelegt ist, aber im ListBoxItem nicht festgelegt ist, weisst du wie ich meine? So:

    <ListBoxItem Style="HauptmenüItem"/>

    Canvas hat aber kein IsSelected-Property denke ich. Ich möchte ja, dass wenn ich ein Item auswähle, das linke BorderThickness des Items, grösser wird...

    XML-Quellcode

    1. <ListBox Style="{DynamicResource Hauptmenü}" ItemsSource="{Binding Meine4Viewmodels}" SelectionMode="Single" IsSynchronizedWithCurrentItem="True">
    2. <ListBox.ItemTemplate>
    3. <DataTemplate>
    4. <Canvas Grid.Column="1" Name="icoContent" Style="{StaticResource Navigationssymbol}" Width="32" Height="32" VerticalAlignment="Center" HorizontalAlignment="Center">
    5. <Canvas.Style>
    6. <Style TargetType="{x:Type ContentControl}">
    7. <Setter Property="Visibility" Value="Collapsed"/>
    8. <Style.Triggers>
    9. <DataTrigger
    10. Binding="{Binding
    11. RelativeSource={RelativeSource
    12. Mode=FindAncestor,
    13. AncestorType={x:Type ListBoxItem}},
    14. Path=IsSelected}"
    15. Value="True">
    16. <Setter Property="Visibility" Value="Visible"/>
    17. </DataTrigger>
    18. </Style.Triggers>
    19. </Style>
    20. </Canvas.Style>
    21. <Path Fill="{DynamicResource VordergrundfarbeBrush}" Data="{Binding Icon}"/>
    22. </Canvas>
    23. </DataTemplate>
    24. </ListBox.ItemTemplate>
    25. </ListBox>


    so in etwa?
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Yep schon besser damit kann ich was anfangen. Bloss wenn ich nun ein Item auswähle, passiert dies bloss, wenn ich auf einen nicht transparenten Teil des Icons klicke... Weisst du wie ich meine? Waren das die Probleme, die du auch erwähnt hast?

    Alternativen zum Canvas sind herzlich willkommen, ich habe die Icons halt in der Form

    XML-Quellcode

    1. <Path Fill="{DynamicResource VordergrundfarbeBrush}" Data="{Binding Icon}"/>


    vorliegen. Also Icon wäre ein String mit einem Icon als XAML...