我在StandardStyles.xaml中添加了一个样式,其定义如下:
<TextBlock Name="txtStatus" Text="{Binding Status}"
Margin="10,2,0,0" Width="350" TextTrimming="WordEllipsis"/>
然后,显示的文本将取决于绑定数据源上的Status属性。我想在之前加入“状态:”这个词,这样决赛就像这样:“状态:完成”。
我还希望根据状态设置条件颜色。在上面的例子中,我希望Completed为绿色(状态字仍然是正常颜色)。
我该怎么做?
答案 0 :(得分:1)
对于条件样式,您必须使用数据绑定转换器。首先创建一个新类,如下所示。
public class StatusToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var _status = value.ToString();
if (_status == "To Do")
return new SolidColorBrush(Windows.UI.Colors.Red);
else if (_status == "In Progress")
return new SolidColorBrush(Windows.UI.Colors.Yellow);
else if (_status == "Completed")
return new SolidColorBrush(Windows.UI.Colors.Green);
else
return new SolidColorBrush(Windows.UI.Colors.White);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
现在,当您想要使用时,将其添加为页面的资源,如此
<Page.Resources>
<local:StatusToColorConverter x:Key="StatusToColor"/>
</Page.Resources>
然后你必须在TextBlock
的前景属性中使用该转换器,该属性由Status
绑定。它将根据Status
返回适当的颜色。
您可以使用<Run />
将文字与装订文字合并。
<TextBlock Name="txtStatus" Margin="10,2,0,0" Width="350" TextTrimming="WordEllipsis">
<Run Text="Status :" /> <Run Text="{Binding Status}" Foreground="{Binding Status, Converter={StaticResource StatusToColor}}"/>
</TextBlock>
答案 1 :(得分:0)
您还可以向DataContext添加一个新属性(StateColor),将文本块包装在Border控件中并将此边框的背景绑定到属性(简单但可能针对MVVM,因为您在viewmodel中获得了一些UI内容)。
实现目标的另一种方法是使用StyleSelector,请参阅: http://zamjad.wordpress.com/2010/01/01/applying-style-conditionally/ http://blogs.u2u.be/diederik/post/2012/05/22/Using-Dynamic-XAML-in-Windows-8-Metro.aspx
欢呼,亚历克斯