2017-02-01 23 views
0

Я работаю над приложением wpf, чтобы показать запись, и мне нужно изменить стиль текста в определенном столбце «Цена», если он меньше 50. Код дается, как показано ниже:Как изменить стиль ячейки сетки данных на основе условного оператора в WPF

<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.

Можете ли вы подсказать, как это сделать?

ответ

1

Вы не можете сделать такого рода сравнений в 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(); 
     } 
    } 
} 

Метод Convert возвращает истину, если цена свойство - < 50, а затем переднего плана TextBlock - зеленый.

 Смежные вопросы

  • Нет связанных вопросов^_^