我已经用尽了互联网搜索,似乎找不到基于数据绑定条件设计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,因此也不希望在我的代码中使用硬编码样式引用。
谢谢大家。
答案 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以获取此示例。