在wpf中更改gridview中的文本颜色?

时间:2011-11-16 16:21:44

标签: c# wpf data-binding

我在listview中使用gridview。我的网格视图有两个colums ID和Result.I我正在从List加载gridview。所以结果列有两种类型的值正面和负面。我想显示文本颜色绿色正面,红色表示否定,并在文本块旁边添加一个图标。

在xaml中可以吗?或者我正在尝试实施哪些是不可能的?

如何根据来自列表的值将颜色绑定到网格中?

 <ListView Height="166" HorizontalAlignment="Left" Margin="23,0,0,0" Name="lvStatus" VerticalAlignment="Top" Width="264">
        <ListView.View>
            <GridView>

                <GridViewColumn Header="Result">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock  Text="{Binding Path=Result}"/>
                                    <Image  ></Image>
                                </StackPanel>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

1 个答案:

答案 0 :(得分:1)

创建Converter,如果指定的值高于0,则返回Green,如果低于0,则返回Red,并使用它来确定文本的前景颜色

public class NumberToColorBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is double)
        {
            return (((double)value) > 0 ? Brushes.Green : Brushes.Red);
        }

        throw new Exception("Invalid Value");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

然后您可以像这样使用您的转换器:

<Window.Resources>
    <local:NumberToColorBrushConverter x:Key="NumberToColorBrushConverter" />
</Window.Resources>

<TextBlock Text="{Binding Result}" Foreground={Binding Result, 
    Converter={StaticResource NumberToColorBrushConverter}}" />

修改

如果您的数据中有一个确定正面或负面的值,那么您甚至不需要使用转换器。这是一个使用DataTrigger

的示例
<Window.Resources>
    <Style x:Key="ResultTextBlockStyle" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <Setter Property="Foreground" Value="Green" />
            <DataTrigger Binding="{Binding PositiveOrNegative}" Value="Negative">
                <Setter Property="Foreground" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<TextBlock Text="{Binding Result}" Style="{StaticResource ResultTextBlockStyle}" />