System.Windows.TriggerAction vs System.Windows.Interactivity.TriggerAction

时间:2013-01-08 12:31:27

标签: c# wpf silverlight

我正在尝试将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看起来满足了需求,但我不确定。

1 个答案:

答案 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"