Mam wiele scenorysów, które mają dostęp do tej samej właściwości (nie w tym samym czasie). Po tym, jak jeden storyboard zmienił nieruchomość, drugi wydaje się nie mieć do niego dostępu i niczego nie zmienia. Co mogę zrobić przeciwko temu?Wiele scenorysów w jednej usłudze
Próbka:
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border Name="Border" BorderBrush="DarkGray" BorderThickness="1" Margin="3">
<ContentPresenter />
<Border.Background>
<SolidColorBrush />
</Border.Background>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.Color" To="#3e8bff" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.Color" To="White" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsSelected" Value="False" />
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.Color" To="Orange" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="Border" Storyboard.TargetProperty="Background.Color" To="White" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</MultiTrigger.ExitActions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Items>
<sys:String>hey</sys:String>
<sys:String>du</sys:String>
<sys:String>dux</sys:String>
<sys:String>duy</sys:String>
<sys:String>dua</sys:String>
</ListBox.Items>
</ListBox>
Jest to najmniejszy przykładowy kod mogłem zrobić. Po ukryciu przedmiotu nie zmieni on koloru na niebieski, gdy jest zaznaczony (spróbuj kliknąć jeden element, a następnie użyj klawiszy strzałek, aby wybrać elementy bez najechania nimi).
Co dokładnie masz na myśli mówiąc "ten drugi wydaje się nie mieć do niego dostępu i niczego nie zmienia"? Czy otrzymujesz komunikat o błędzie? Specyficzne nieoczekiwane zachowanie? –
Aby być bardziej szczegółowym, mam ListBox. W ItemContainerStyle definiuję szablon dla wszystkich obiektów ListBoxItems. Tutaj wyzwalam IsMouseOver i IsSelected i definiuję Storyboard dla efektu wejścia/wyjścia. Po ukryciu przedmiotu tło powinno zmienić kolor na pomarańczowy, a po wybraniu powinno zmienić kolor na niebieski. Mogę unieść jeden przedmiot tyle razy, ile chcę, działa. Ale jeśli go wybiorę i odznaczę go ponownie, efekt zawieszania się nie będzie już działał. Jeśli użyję różnych właściwości, to nadal działa. – eWolf
Wydaje się, że jest to coś z kolejnością wyzwalaczy. Jeśli wstawię wyzwalacz IsSelected przed wyzwalaczem IsMouseOver (który, nawiasem mówiąc, jest MultiTriggerem i nie zostanie podniesiony, gdy element IsSelected), jest odwrotnie: efekt IsSelected nie działa po tym, jak przedmiot się unosił pewnego razu. – eWolf