【发布时间】:2010-10-22 07:34:47
【问题描述】:
我有多个故事板访问同一个属性(不是同时)。在一个故事板更改属性后,另一个故事板似乎无法访问它并且没有更改任何内容。我该怎么办?
示例:
<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>
这是我能做的最小的示例代码。悬停一个项目后,它在被选中时不会变成蓝色(尝试单击一个项目,然后使用箭头键选择项目而不悬停它们)。
【问题讨论】:
-
“另一个似乎无法访问它并且没有改变任何东西”到底是什么意思?您收到错误消息吗?具体的意外行为?
-
更具体地说,我有一个 ListBox。在 ItemContainerStyle 中,我为所有 ListBoxItems 定义了一个模板。在这里,我触发 IsMouseOver 和 IsSelected 并为淡入/淡出效果定义情节提要。当项目悬停时,背景应该变成橙色,当它被选中时,它应该变成蓝色。我可以根据需要多次悬停一个项目,它可以工作。但是如果我选择它,然后再次取消选择它,悬停效果就不再起作用了。如果我使用不同的属性,它仍然有效。
-
这似乎与触发器的顺序有关。如果我将 IsSelected 触发器放在 IsMouseOver 触发器的前面(顺便说一下,它是一个 MultiTrigger 并且在项目 IsSelected 时不会引发),则相反:在项目悬停后 IsSelected 效果不起作用一次。
标签: c# wpf xaml animation storyboard