У меня есть Datagrid в моем окне с 2 столбцами, добавленными в XAML, и 1 столбцом, добавленным в код позади. Мне удалось удалить синий цвет из первых двух столбцов, добавив стиль DataGridCell с нулевым фоном. Но в коде позади я не могу заставить его работать.
Это Window.xaml
<Window
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:System = "clr-namespace:System;assembly=mscorlib" x:Class = "WpfApp1.MainWindow"
mc:Ignorable = "d"
Title = "MainWindow" Height = "450" Width = "800">
<Window.Resources>
<Style TargetType = "{x:Type DataGridCell}">
<Setter Property = "Background" Value = "{x:Null}" />
<Setter Property = "BorderBrush" Value = "{x:Null}" />
<Style.Triggers>
<Trigger Property = "IsSelected" Value = "True">
<Setter Property = "Background" Value = "{x:Null}" />
<Setter Property = "BorderBrush" Value = "{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<DataGrid x:Name = "CandidatesEpisodesMatrix"
ColumnWidth = "*"
AutoGenerateColumns = "False" CanUserAddRows = "False" HeadersVisibility = "Column" SnapsToDevicePixels = "True" SelectionUnit = "Cell" RowDetailsVisibilityMode = "Collapsed" >
<DataGrid.Columns>
<DataGridTextColumn Binding = "{Binding Name}" />
<DataGridCheckBoxColumn/>
<!-- Other columns are added dynamically -->
</DataGrid.Columns>
<System:Object/>
<System:Object/>
</DataGrid>
</Grid>
</Window>
И это мой код:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
AddMatrixColumn();
}
private void AddMatrixColumn()
{
var factory = new FrameworkElementFactory(typeof(CheckBox));
var columnCellTemplate = new DataTemplate(typeof(CheckBox));
columnCellTemplate.VisualTree = factory;
var style = new Style();
style.Setters.Add(new Setter(HorizontalAlignmentProperty, HorizontalAlignment.Stretch));
style.Triggers.Add(new DataTrigger
{
Binding = new Binding("IsSelected"),
Value = true,
Setters =
{
new Setter(BackgroundProperty, Brushes.BlueViolet),
new Setter(BorderBrushProperty, Brushes.Aqua),
}
});
var headerStyle = new Style();
headerStyle.Setters.Add(new Setter(HorizontalAlignmentProperty, HorizontalAlignment.Center));
var column = new DataGridTemplateColumn();
column.Header = "episode.Name";
column.HeaderStyle = headerStyle;
column.CellTemplate = columnCellTemplate;
column.CellStyle = style;
CandidatesEpisodesMatrix.Columns.Add(column);
}
}
Я надеялся изменить цвет фона, добавив в стиль триггер, но это не сработало. Что я делаю не так?
Нашел! Я был почти там с Триггером. Следует использовать не DataTrigger
, а обычный Trigger
. Вот каким должен быть триггер:
style.Triggers.Add(new Trigger
{
Property = DataGridCell.IsSelectedProperty,
Value = true,
Setters =
{
new Setter(BackgroundProperty, Brushes.Transparent), // Or whatever color
new Setter(BorderBrushProperty, Brushes.Transparent),
}
});
Спасибо за совет! Я изменю значение null на Brushes.Transparent.
лучше использовать Прозрачный. проверьте этот пост: stackoverflow.com/questions/5344699/xnull-vs-прозрачный