4

インターネット検索を使い果たしましたが、データ バインディング条件に基づいて Windows ストア アプリの XAML 要素をスタイル設定するためのベスト プラクティスが見つからないようです。

<Style.Triggers><DataTrigger>...</DataTrigger></Style.Triggers>WPF のように Windows 8 ストア アプリで利用できるようには見えず、ビジュアル ステート マネージャーは事前に設定された対話状態のためのものMouseOverではないでしょうか? 基になるビュー モデルに応じて UI を劇的に変更するにはどうすればよいですか?

この質問に対する明確な回答のシナリオを作成するには<TextBlock />、データ バインディング条件に応じて、たとえばあるスタイルから別のスタイルに変更するためのベスト プラクティス/最も広く受け入れられている方法は何ですか? 色のようなものにコンバーターを使用できることを知っているので、スタイルと言いますが、私の変更が非常に複雑になるとどうなりますか? たとえば、境界線、フォント サイズ、背景色も追加しますか?

私の 2 番目のシナリオは、ビュー モデルの条件に応じてタグの を置き換えたいのですが、これも可能ですDataか? <Path />基本的に、「クロス」と「ティック」の XAML パスがあり、ビュー モデル プロパティに応じてそれらを交換したいと考えています。

可能な場合は MVVM にも準拠しようとしているので、コード ビハインドでスタイル参照をハードコーディングしないこともお勧めします。

皆さんありがとう。

4

1 に答える 1

1

それVisualStateManagerはあなたが望むものです。ここから:

状態と、コントロールの状態間を移行するためのロジックを管理します。

それはあなたが望むものをカバーするのに十分一般的だと思います。

同じリンクの例から、いくつかのアイデアが得られるはずです。

<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>

        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

コードからの状態を変更することもできることに注意することが重要VisualStateManagerです。この例については、デフォルトテンプレートのLayoutAwarePage.csを参照してください。

于 2012-10-13T18:01:31.957 に答える