什么是Silverlight中DataTrigger的替代品

Pri*_*aka 18 silverlight datatrigger vsm silverlight-4.0

这是我的情景.

我有2个属性.类型和状态.

类型是具有3个值的枚举,例如球,汽车,箭头.State是一个int,可以接受3个状态值,例如-1,0,1.另外,我有每个状态值的9个图像.

就像,如果我选择类型为球,值为-1,我想显示一个红色球.如果我选择类型为箭头并将值选为1,我想显示向上箭头.等等.,

我能够在WPF中做到这一点.我创建了3个带有空图像的DataTemplates.然后,我使用DataTrigger检查并更新所选StateValue的特定图像.

但是,在silverlight中我该怎么做呢.我知道,我必须在VSM中这样做.但是,我想知道关于这个(或)任何可用替代方案的更多细节.

Mik*_*ost 17

我在Silverlight中使用GoToState行为和DataTriggers.Blend非常简单:

将您的所有逻辑放在视图模型中驱动您进入不同状态的所有逻辑中.将状态公开为枚举.打开"状态"选项卡.创建一个新的状态组(如果您还没有).创建你的州.从"资产"选项卡中,选择"行为".从"资源"选项卡中拖动GoToState行为,并将其放在根视觉元素上.在"属性"面板中,单击"TriggerType"旁边的"新建"按钮,然后选择"DataTrigger".还记得您的视图模型上的枚举吗?将Trigger Binding设置为视图模型上的状态枚举.将Trigger Value设置为枚举值.将StateName设置为目标状态.

Blend现在应该为您生成所有VSM XAML.一旦掌握了一些东西,你会看到在某些情况下你甚至不需要视图模型上的枚举 - 你将能够完全从视图中驱动状态.


Ray*_*Ray 13

要扩展Mike Post的帖子,这里是XAML,以防你没有Blend.

您需要添加对Microsoft.Expression.Interactions和System.Windows.Interactivity的引用.

xmlns:ia="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
xmlns:iv="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
Run Code Online (Sandbox Code Playgroud)

然后在你的控件中,在与VisualStateManager相同的级别上放置:

<iv:Interaction.Triggers>
    <ia:DataTrigger Binding="{Binding PropertyName}" Value="PropertyValue"  >
        <ia:GoToStateAction StateName="StateName" />
    </ia:DataTrigger>
</iv:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)


Jud*_*ngo 6

我只是使用一个转换器,它将你的对象带有2个属性并返回一个图像.像纯XAML中的代码是痛苦的,真的属于C#.


Xca*_*r37 5

博客文章"Silverlight-DataTrigger示例中的Expression SDK"非常清楚.以下是他所做的一个示例:

<i:Interaction.Triggers>
    <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="false">
        <ia:ControlStoryboardAction Storyboard="{StaticResource DisableStoryboard}"></ia:ControlStoryboardAction>
    </ia:DataTrigger>

    <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="true">
        <ia:ControlStoryboardAction Storyboard="{StaticResource EnableStoryboard}"></ia:ControlStoryboardAction>
    </ia:DataTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

(使用两个XML名称空间前缀iia定义如下:)

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ia="http://schemas.microsoft.com/expression/2010/interactions"
Run Code Online (Sandbox Code Playgroud)