我正在尝试将Silverlight项目移植到WPF,其中项目依赖于触发器和动作来在视觉状态下进行转换。
我知道这是有效的,因为我之前已经这样做了,但出于某种原因,在我当前的版本中,当我尝试将一个GoToStateAction(继承自System.Windows.Interactivity.TriggerAction)添加到EventTrigger动作集合时,我得到错误“GoToStateAction”无法添加到“TriggerActionCollection”类型的集合或字典中(正在寻找System.Windows.TriggerAction)
要让WPF中的GoToStateAction工作,我该怎么办?我的目标是使用以下内容:(基于原始的Silverlight实现)
<Grid.Triggers>
<EventTrigger RoutedEvent="MouseLeave" SourceName="PART_DataWaveGrid">
<ei:GoToStateAction x:Name="MouseLeaveTrigger" StateName="Collapsed"/>
</EventTrigger>
<EventTrigger RoutedEvent="MouseEnter" SourceName="PART_DataWaveGrid">
<ei:GoToStateAction x:Name="MouseEnterTrigger" StateName="Expanded"/>
</EventTrigger>
<EventTrigger RoutedEvent="Loaded">
<ei:GoToStateAction x:Name="LoadTrigger" StateName="Collapsed"/>
</EventTrigger>
</Grid.Triggers>
另外 - 第二个问题,EventTrigger上不再存在EventName,那么我应该使用什么呢? RoutedEvent看起来满足了需求,但我不确定。
答案 0 :(得分:0)
这已经很晚了,但是自从我在相关搜索中发现这个问题后,我会尝试回答它。
为了与Blend良好集成而开发的System.Windows.Interactivity中的触发器功能不能与System.Windows中的触发器类混合使用。我会选择System.Windows.Interactivity触发器,并将代码修改为这样的(实际上未经过测试):
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeave" SourceName="PART_DataWaveGrid">
<ei:GoToStateAction x:Name="MouseLeaveTrigger" StateName="Collapsed"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseEnter" SourceName="PART_DataWaveGrid">
<ei:GoToStateAction x:Name="MouseEnterTrigger" StateName="Expanded"/>
</i:EventTrigger>
<i:EventTrigger EventName="Loaded">
<ei:GoToStateAction x:Name="LoadTrigger" StateName="Collapsed"/>
</i:EventTrigger>
</i:Interaction.Triggers>
使用命名空间i:定义为
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"