如何根据 WPF 中的条件运算符更改数据网格单元格的样式

How to change style of data grid cell based on conditional operator in WPF

我正在开发一个 wpf 应用程序来显示记录,如果它小于 50,我需要更改特定列 "Price" 中的文本样式。代码如下:

 <DataGrid ItemsSource="{Binding Path= Shares}" HorizontalAlignment="Left" Margin="89,201,0,0" CanUserAddRows="False" AutoGenerateColumns="False" VerticalAlignment="Top" Height="280" Width="500">
       <DataGrid.Columns>
            <DataGridTextColumn Header="Company" Binding="{Binding CompanyName}" Width="250" />
            <DataGridTextColumn Header="Share Price" Binding="{Binding Price}" />                       
        </DataGrid.Columns>
    </DataGrid>

所以如果价格 < 50,我需要更改价格文本的前景色。

你能建议怎么做吗?

您不能在 XAML 中进行此类比较,因为没有定义 < 运算符,但您可以使用转换器:

<DataGrid ItemsSource="{Binding Path= Shares}" HorizontalAlignment="Left" Margin="89,201,0,0" CanUserAddRows="False" AutoGenerateColumns="False" 
                  VerticalAlignment="Top" Height="280" Width="500"
                  xmlns:local="clr-namespace:WpfApplication1">
    <DataGrid.Resources>
        <local:MyConverter x:Key="conv" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Company" Binding="{Binding CompanyName}" Width="250" />
        <DataGridTextColumn Header="Share Price" Binding="{Binding Price}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Price, Converter={StaticResource conv}}" Value="True">
                            <Setter Property="Foreground" Value="Green" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

namespace WpfApplication1
{
    public class MyConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            decimal d = System.Convert.ToDecimal(value);
            return d < 50;
        }

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

如果价格 属性 < 50,则 Convert 方法 returns 为真,然后 TextBlock 的前景更改为绿色。