Создал пользовательскую строку данных в своей таблице. Вот XAML - разметка:
<DataGrid HorizontalAlignment="Left" Height="244" Margin="468,535,0,0" VerticalAlignment="Top" Width="521"
AutoGenerateColumns="false" ItemsSource="{ Binding TestDataTable}" >
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsMerged}" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRow}">
<!--<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</ControlTemplate.Triggers>-->
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<SelectiveScrollingGrid>
<SelectiveScrollingGrid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</SelectiveScrollingGrid.ColumnDefinitions>
<Border BorderBrush="Black" BorderThickness="0,0,1,1" Grid.Column="1">
<TextBlock HorizontalAlignment="Center">
<TextBlock.Inlines>
<Run Text="{Binding _1}"/>
</TextBlock.Inlines>
</TextBlock>
</Border>
<DataGridRowHeader SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
</SelectiveScrollingGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ItemContainerStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="1" Width="*" Binding="{Binding Path = _1, Mode=TwoWay}"/>
<DataGridTextColumn Header="2" Width="*" Binding="{Binding Path = _2, Mode=TwoWay}"/>
<DataGridTextColumn Header="3" Width="*" Binding="{Binding Path = _3, Mode=TwoWay}"/>
<DataGridTextColumn Header="4" Width="*" Binding="{Binding Path = _4, Mode=TwoWay}"/>
<DataGridTextColumn Header="5" Width="*" Binding="{Binding Path = _5, Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>
Вот код C#:
TestDataTable = new ObservableCollection<TestModel>();
for(int i = 0;i<10;i++)
{
TestDataTable.Add(new TestModel((i % 2 == 0 ? true : false), i.ToString(), (i + 1).ToString(), (i + 2).ToString(), (i + 3).ToString(), (i + 4).ToString()));
}
public class TestModel
{
public bool IsMerged { get; set; }
public string _1 { get; set; }
public string _2 { get; set; }
public string _3 { get; set; }
public string _4 { get; set; }
public string _5 { get; set; }
public TestModel(bool ism, string _1, string _2, string _3, string _4, string _5)
{
IsMerged = ism;
this._1 = _1;
this._2 = _2;
this._3 = _3;
this._4 = _4;
this._5 = _5;
}
}
И привязываю к DataContext. Всё работает как предполагал, вот скриншот:
Однако, вот эта новая строка(0, 2 etc) не выделяется мышью. Я пробовал привязать триггер к ControlTemplate(закомментированный блок в XAML-коде), но это не работает. Подскажите, как верно сделать выделение строки. Спасибо.
При такой разметке строка подчиняется выделению, однако, поменять цвет выделенной ячейки не получается, как бы я не бился. Если кто - то знает - подскажите, буду рад.
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_MouseLeftButtonDown" ></EventSetter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsMerged}" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRow}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" SnapsToDevicePixels="True" x:Name="SelectedMergedRow">
<SelectiveScrollingGrid>
<SelectiveScrollingGrid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</SelectiveScrollingGrid.ColumnDefinitions>
<SelectiveScrollingGrid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</SelectiveScrollingGrid.RowDefinitions>
<DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
<DataGridCellsPresenter.Template>
<ControlTemplate TargetType="DataGridCellsPresenter">
<DataGridCell Height="20">
<TextBlock HorizontalAlignment="Center" Text="{Binding NameNull}"/>
<DataGridCell.Style>
<Style TargetType="DataGridCell">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="True">
<Setter Property="Background" Value="#CCDAFF"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</DataTrigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource {x:Static DataGrid.FocusBorderBrushKey}}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridCell.Style>
</DataGridCell>
</ControlTemplate>
</DataGridCellsPresenter.Template>
</DataGridCellsPresenter>
<DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
</SelectiveScrollingGrid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.ItemContainerStyle>
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости