代码之家  ›  专栏  ›  技术社区  ›  Prince Ashitaka

Silverlight中DataTrigger的替代品是什么

  •  18
  • Prince Ashitaka  · 技术社区  · 14 年前

    类型是一个带有3个值的枚举,例如,ball、car、arrow。State是一个int,它接受3个状态值,例如-1,0,1。另外,每个状态值有9个图像。

    比如,如果我选择type作为ball,value作为-1,我想显示一个红色的球。 如果我选择type作为arrow,value作为1,我想显示一个向上箭头。等。,

    我可以在WPF里做这个。我创建了3个带有空图像的数据模板。然后,我使用DataTrigger检查并更新所选StateValue的特定图像。

    但是,在silverlight里我怎么能做到这一点。我知道,我必须在VSM里做。但是,我想知道更多关于这个(或)任何替代品的细节。

    4 回复  |  直到 14 年前
        1
  •  6
  •   Judah Gabriel Himango    14 年前

    我只需要使用一个转换器,它获取具有2个属性的对象并返回一个图像。在纯XAML中这样的代码是痛苦的,而且真正属于C。

        2
  •  17
  •   Mike Post    14 年前

    在视图模型中放置所有驱动您进入不同状态的逻辑。 将状态公开为枚举。 创建一个新的状态组(如果您还没有)。 从“资源”选项卡中,选择“行为”。 从Assets选项卡中拖动GoToState行为,并将其放到根可视元素上。 在Properties面板中,单击TriggerType旁边的“New”按钮并选择DataTrigger。 将触发器值设置为枚举的值。 将StateName设置为目标状态。

    Blend现在应该已经为您生成了所有VSM XAML。一旦掌握了窍门,您将看到在某些场景中甚至不需要在视图模型上使用enum——您将能够将状态完全从视图中移除。

        3
  •  13
  •   Ray    13 年前

    为了扩展mikepost的文章,这里是XAML,以防您没有Blend。

    xmlns:ia="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
    xmlns:iv="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
    

    然后在您的控制下,在与VisualStateManager相同的级别上:

    <iv:Interaction.Triggers>
        <ia:DataTrigger Binding="{Binding PropertyName}" Value="PropertyValue"  >
            <ia:GoToStateAction StateName="StateName" />
        </ia:DataTrigger>
    </iv:Interaction.Triggers>
    
        4
  •  5
  •   stakx - no longer contributing Saravana Kumar    9 年前

    博客帖子 "Expression SDK in Silverlight–DataTrigger Example"

    <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>
    

    (带有两个XML命名空间前缀) i ia 定义如下:)

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ia="http://schemas.microsoft.com/expression/2010/interactions"