Ich habe den folgenden Code-Schnipsel (Kopieren und Einfügen in Kaxaml, Xamlpad, etc, um es zu versuchen) , die alle außer dem ausgewählten Element zusammenbricht. Ich möchte jedoch auf alle sichtbaren zurück, wenn die Maus nicht über die ListBox
ist und ich kann es einfach nicht funktionieren, kurz hinter dem Code hinter zu gehen. Ich verwende die IsMouseOver
ListBox-Eigenschaft, um ausgewählte Elementeigenschaften auf dem ListBox
festzulegen, um zu versuchen, ein Update aber kein Glück auszulösen. Irgendwelche Ideen?ListBox Erweitern ausgewählten Artikel
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ListBox
Name="lb"
Width="100"
Height="100"
Background="Red"
SelectionMode="Single">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="1"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBoxItem Background="AliceBlue">Item 1
</ListBoxItem>
<ListBoxItem Background="Aquamarine">Item
</ListBoxItem>
<ListBoxItem Background="Azure">Item
</ListBoxItem>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="False"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}},Path=SelectedItems.Count}" Value="1"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard Duration="0:0:1">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:1" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Duration="0:0:1" Storyboard.TargetProperty="Opacity" To="0"/>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True"/>
<Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}},Path=SelectedItems.Count}" Value="1"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard Duration="0:0:0">
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Duration="0:0:0" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Style>
<Style>
<Style.Triggers>
<Trigger Property="ListBox.IsMouseOver" Value="False">
<Setter Property="ListBox.SelectedItem" Value="{x:Null}"/>
<Setter Property="ListBoxItem.IsSelected" Value="False"/>
<Setter Property="ListBox.SelectedIndex" Value="-1"/>
</Trigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<BeginStoryboard>
<Storyboard>
<Int32Animation Duration="0:0:0" Storyboard.TargetProperty="SelectedIndex" To="-1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
</Grid>
</Page>
Schöne Lösung. Vielen Dank! – HiteshP
Ich habe dieses Problem abgeschlossen und jetzt habe ich erkannt, warum es genau so funktioniert :) Der Grund ist, dass Animationen die höchste Priorität beim Festlegen von Abhängigkeitseigenschaften haben. Wenn Sie also einige Eigenschaften mithilfe einer Animation festgelegt haben und zu den ursprünglichen Werten zurückkehren möchten, verwenden Sie dazu die Animation, wie im Element MultiDataTrigger.ExitActions. –