18

これが私のシナリオです。

私は2つのプロパティを持っています。タイプと状態。

タイプは、ボール、車、矢などの 3 つの値を持つ Enum です。State は、-1、0、1 などの 3 つの状態値を受け入れる int です。また、状態値ごとに 9 つの画像があります。

同様に、タイプをボール、値を -1 に選択すると、赤色のボールが表示されます。タイプに矢印、値に 1 を選択すると、上向きの矢印が表示されます。等。、

私はWPFでこれを行うことができます。空の画像で 3 つの DataTemplates を作成しました。次に、DataTrigger を使用して、選択した StateValue の特定の画像を確認および更新します。

しかし、シルバーライトではどうすればこれを行うことができますか。私は知っています、私はVSMでそれをしなければなりません。しかし、これ(または)利用可能な代替手段に関する詳細を知りたいです。

4

4 に答える 4

17

Silverlight では、DataTriggers で GoToState ビヘイビアーを使用します。Blend では非常にシンプルです。

ビューモデルに別の状態に移動するためのすべてのロジックを配置します。状態を列挙型として公開します。[状態] タブを開きます。新しい状態グループを作成します (まだ作成していない場合)。状態を作成します。[アセット] タブから、[ビヘイビア] を選択します。[アセット] タブから GoToState 動作をドラッグし、ルート ビジュアル要素にドロップします。[プロパティ] パネルで、TriggerType の横にある [新規] ボタンをクリックし、DataTrigger を選択します。ビューモデルの列挙型を覚えていますか? トリガー バインディングをビュー モデルの状態列挙型に設定します。トリガー値を列挙型の値に設定します。StateName をターゲット状態に設定します。

Blend がすべての VSM XAML を生成するはずです。コツをつかめば、一部のシナリオでは、ビュー モデルの列挙型さえも必要としないことがわかります。状態をビューから完全に追い出すことができます。

于 2010-11-11T18:25:53.717 に答える
13

マイクポストの投稿を拡張するために、Blendがない場合のXAMLを次に示します。

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" 

次に、コントロールで、VisualStateManagerと同じレベルに次のように配置します。

<iv:Interaction.Triggers>
    <ia:DataTrigger Binding="{Binding PropertyName}" Value="PropertyValue"  >
        <ia:GoToStateAction StateName="StateName" />
    </ia:DataTrigger>
</iv:Interaction.Triggers>
于 2011-04-20T08:21:20.657 に答える
6

2つのプロパティを持つオブジェクトを取得し、画像を返すコンバーターを使用します。純粋なXAMLでのそのようなコードは苦痛であり、実際にはC#に属しています。

于 2010-09-17T16:32:11.083 に答える
5

ブログ記事「Silverlight の Expression SDK – DataTrigger の例」では、かなり詳しく説明されています。以下は、彼が行っていることのサンプルです。

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

(2 つの XML 名前空間プレフィックスがiありia、次のように定義されています:)

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ia="http://schemas.microsoft.com/expression/2010/interactions"
于 2011-12-08T05:12:12.400 に答える