Сначала я отвечу на второй вопрос: чтобы отключить выбор строк, вы можете изменить RowStyle вашей DataGrid.
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsEnabled" Value="False"/>
</Style>
</DataGrid.RowStyle>
<!--Other DataGrid items-->
</DataGrid>
Тем не менее, это меняет стиль текста, так как сама строка теперь "отключен".Это также не отменяет тот факт, что пользователь все еще может щелкнуть правой кнопкой мыши по строке, чтобы выбрать ее.Если вы действительно хотите отключить любое взаимодействие со строками таблицы данных, вы можете сделать следующее:
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
</DataGrid.RowStyle>
<!--Other DataGrid items-->
</DataGrid>
Поскольку строки все еще включены, стиль текста не изменяется.
Теперь, если вы хотите только изменить стиль выбранной строки, но оставить функциональность в покое, вы можете сделать следующее (что в основном совпадает с ответом @Dan Stevens). ControlTextBrushKey - это кисть, которая используется системой для окрашивания текстовых элементов.Пожалуйста, посмотрите на этот ответ для объяснения между DynamicResource и StaticResource.
<DataGrid>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background" Value="Transparent"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<!--Other DataGrid items-->
</DataGrid>
Важно отметить, что вышеприведенное решение не меняет стиль DataGridRowHeader при выборе строки,как видно ниже (выбран первый ряд).
