Windows应用商店应用中的条件样式(或Style.Triggers-> DataTrigger等效)的最佳实践?

时间:2012-10-13 12:07:07

标签: data-binding mvvm windows-8 windows-runtime winrt-xaml

我已经用尽了互联网搜索,似乎找不到基于数据绑定条件设计Windows Store App XAML元素的最佳做法?

<Style.Triggers><DataTrigger>...</DataTrigger></Style.Triggers>似乎在Windows 8商店应用程序中不像在WPF中那样可用,并且Visual State Manager仅用于预先设置的交互状态,例如MouseOver不是吗?如何根据我的基础视图模型显着更改我的UI?

要创建一个明确回答此问题的方案,根据数据绑定条件,将<TextBlock />从一种样式更改为另一种样式的最佳实践/最广泛接受的方法是什么?我说风格,因为我知道你可以使用转换器来获得类似颜色的东西,但是如果我的变化变得非常复杂呢?例如,还添加边框,字体大小和背景颜色?

我的第二种情况是,我想根据视图模型条件替换Data标记的<Path />,这也可能吗?基本上,我有一个'cross'和'tick'XAML路径,并希望根据视图模型属性将它们交换出来。

我试图在可能的情况下坚持使用MVVM,因此也不希望在我的代码中使用硬编码样式引用。

谢谢大家。

1 个答案:

答案 0 :(得分:1)

VisualStateManager就是你想要的。来自here

  

管理状态和状态之间转换的逻辑   控件。

我认为这足以涵盖你想要的东西。

来自同一链接的示例应该为您提供一些想法:

<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以获取此示例。