4

我已经用尽了 Internet 搜索,但似乎找不到根据数据绑定条件设置 Windows Store App XAML 元素样式的最佳实践?

<Style.Triggers><DataTrigger>...</DataTrigger></Style.Triggers>在 Windows 8 商店应用程序上似乎不可用,就像在 WPF 中一样,并且视觉状态管理器仅用于预设交互状态MouseOver,不是吗?如何根据我的底层视图模型显着改变我的 UI?

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

我的第二种情况是我想根据视图模型条件替换标签,这也可能吗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>

请务必注意,您还可以更改VisualStateManagerfrom 代码的状态。查看默认模板中的 LayoutAwarePage.cs 以获取此示例。

于 2012-10-13T18:01:31.957 回答