如何根据 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 的前景更改为绿色。
我正在开发一个 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 的前景更改为绿色。