我正在构建一个Windows Phone 8应用,其视图模型属性为:
public bool IsReply {get; set;}
在我的xaml代码中,我想区分两种情况:
IsReply=True
<Grid Margin="0,0,0,0">
...
</Grid>
IsReply=False
<Grid Margin="40,0,0,0">
...
</Grid>
基本上,我想根据IsReply的值设置Grid元素的样式。我知道在WPF Style.Triggers存在,但显然不在WP中。 我现在的解决方案是拥有整个网格代码的副本,并将每个网格代码的可见性设置为数据转换器。但是,我觉得这应该更简单。
答案 0 :(得分:6)
最简单的方法是使用带触发器的样式:
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Margin" Value="40 0 0 0"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsReply}" Value="True">
<Setter Property="Margin" Value="0 0 0 0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
答案 1 :(得分:0)
您可以绑定margin
grid
的{{1}}
MVVM
在你的模特中
<Grid Margin="{Binding margin}">
...
</Grid>
无需创建单独的网格。
答案 2 :(得分:0)
您可以使用DataTrigger,但必须添加这两个引用(右键单击项目中的References和AddReference / Assemblies / Extensions / ...)。
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<Grid
Margin="0">
<i:Interaction.Triggers>
<ei:DataTrigger
Binding="{Binding Path=IsReply}"
Value="True">
<ei:ChangePropertyAction
PropertyName="Margin"
Value="0" />
</ei:DataTrigger>
<ei:DataTrigger
Binding="{Binding Path=IsReply}"
Value="False">
<ei:ChangePropertyAction
PropertyName="Margin"
Value="40,0,0,0" />
</ei:DataTrigger>
</i:Interaction.Triggers>
</Grid>