我有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
答案 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();
}