1

我在 StandardStyles.xaml 中添加了一个样式,其定义如下:

        <TextBlock Name="txtStatus" Text="{Binding Status}" 
               Margin="10,2,0,0" Width="350" TextTrimming="WordEllipsis"/>

然后显示的文本将取决于绑定数据源上的 Status 属性。我想在前面加上“状态:”这个词,这样最终结果会是这样的:“状态:完成”。

我还想根据状态使用条件颜色。在上述情况下,我希望 Completed 为绿色(状态字仍为正常颜色)。

我怎样才能做到这一点?

4

2 回答 2

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>
于 2013-06-03T02:08:42.683 回答
0

您还可以向 DataContext 添加一个新属性(StateColor),将您的文本块包装在一个边框控件中并将此边框的背景绑定到该属性(简单但可能针对 MVVM,因为您将一些 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

干杯,亚历克斯

于 2013-06-03T12:04:25.100 回答