В моем проекте wpf я сделал IMultiValueConverter
, который изменил бы передний план моих DataGridCells следующим образом:
class CellForegroundMultiValueConverter : IMultiValueConverter
{
#region Implementation of IMultiValueConverter
/// <inheritdoc />
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
SolidColorBrush mainred = new SolidColorBrush(System.Windows.Media.Color.FromRgb(223,70,75));
var columnHeader = values[0] as string;
var dataItem = values[1] as Task;
if( columnHeader.Equals("Status", StringComparison.OrdinalIgnoreCase)
&& dataItem.Status.Equals("Success!", StringComparison.OrdinalIgnoreCase))
{
return mainred;
}
if( columnHeader.Equals("#", StringComparison.OrdinalIgnoreCase))
{
return mainred;
}
if( columnHeader.Equals("Proxy"))
{
if(dataItem.Proxy)
{
return Brushes.LightGreen;
}
return mainred;
}
return Brushes.White;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) => throw new NotSupportedException();
#endregion
}
, который здесь связан с моей DataGrid вот так:
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
...
<Setter Property="Foreground">
<Setter.Value>
<MultiBinding>
<MultiBinding.Converter>
<local:CellForegroundMultiValueConverter />
</MultiBinding.Converter>
<Binding RelativeSource="{RelativeSource Self}" Path="Column.Header"/>
<Binding/>
<Binding Path="HasChanges" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGrid.CellStyle>
У меня есть DataGridTemplateColumn, который показывает количество элементов, которые у вас есть в DataGrid, например:
<DataGridTemplateColumn Width="*" Header="#" MaxWidth="60">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalAlignment" Value="Left" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="20"/>
<!--<Setter Property="Height" Value="57"/>-->
<Setter Property="BorderBrush">
<Setter.Value>
<MultiBinding>
<MultiBinding.Converter>
<local:CellForegroundMultiValueConverter />
</MultiBinding.Converter>
<Binding RelativeSource="{RelativeSource Self}" Path="Column.Header"/>
<Binding/>
<Binding Path="HasChanges" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="#262626" CornerRadius="5,5,5,5" BorderThickness="2" BorderBrush="{Binding StatusColour}">
<Border.Style>
<Style TargetType="Border">
</Style>
</Border.Style>
<TextBlock Text="{Binding NumberOTasks}" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="15" Foreground="#E43D47"/>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Если я добавлю IMultiValueConverter
в DataGridTemplateColumn.CellStyle
, он будет работать и добавляет цвет для границы , но это не зависит от углового радиуса границы, но если я добавлю его в стиль границы, он не будет работать и говорит, что заголовок столбца равен = null. Как я смогу изменить borderbru sh, и это будет зависеть от угла на границе?