使textblock的文本取决于其变量

时间:2014-03-22 15:31:18

标签: c# windows-phone-8

我有9个文本块,每个都显示一个变量

int blockNum1,blockNum2,blockNum3, ...;
textblock1.Text = blockNum1.ToString();
textblock2.Text = blockNum2.ToString();
textblock3.Text = blockNum3.ToString();
...

那么如何更改每个" textblock"上显示的数字的颜色?取决于它的blockNum变量

blockNum4 = 1 -> textblock4 display red text + number "1",
blockNum4 = 2 -> textblock4 display yellow text + number "2"  etc.  
顺便说一句,抱歉我的英语不好:P

2 个答案:

答案 0 :(得分:1)

为了实现您的目标,您还可以使文本颜色(前景属性)依赖于文本(字符串)。为此,您需要使用转换器并将Foreground绑定到Text。这个非常简单的例子如下所示:

转换器:

public class NumberToColor : IValueConverter
{
    private SolidColorBrush[] tableOfColors = new SolidColorBrush[] 
    {
        new SolidColorBrush(Colors.Yellow), // Number = 1
        new SolidColorBrush(Colors.Red)     // Number = 2
    };

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        if (value == null) return new SolidColorBrush(Colors.Black);
        else return tableOfColors[int.Parse((string)value) - 1];
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Array.FindIndex(tableOfColors, brush => brush == (SolidColorBrush)value);
    }
}

正如您所看到的,我已经定义了tableOfColors,然后根据解析的文本更改了前景。请注意,它也可以通过许多不同的方式完成 - 从RGB获取颜色等。这取决于你的需求。

然后在XAML中你可以像这样使用它:

<phone:PhoneApplicationPage.Resources>
    <app:NumberToColor x:Key="myConv" xmlns:app="clr-namespace:Example"/>
</phone:PhoneApplicationPage.Resources>

<Grid x:Name="LayoutRoot" Background="Transparent">
        <TextBlock Name="myText" Text="1" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="{Binding RelativeSource={RelativeSource Self}, Path=Text, Converter={StaticResource myConv}}"/>
</Grid>

使用文本自动更改颜色。请注意,这是一个非常简单的示例,需要进行许多改进(特别是在解析Text时检查很多),但希望它能帮助您解决问题。其他优点是此实现不需要blockNum1值。 complete sample code you can download here。{{3}}。祝你好运。

答案 1 :(得分:0)

您可以调用这样的方法来检查文本中的数字,然后相应地设置颜色

if(blockNum1.ToString().Trim() == '1')
{
  textblock1.Foreground = System.Drawing.Color.Red;
  textblock1.Text=blockNum1.ToString();
}