1

我正在尝试将 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>

另外 - 第二个问题,EventName 不再存在于 EventTrigger 上,那么我应该改用什么?RoutedEvent 看起来可以满足需求,但我不确定。

4

1 回答 1

0

当然这已经很晚了,但是因为我在相关搜索中发现了这个,所以我会尝试回答它。

System.Windows.Interactivity 中的触发器功能是为与 Blend 良好集成而开发的,不能与 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"
于 2015-03-26T07:52:08.897 回答