Вам нужно будет сделать следующее:
- Добавьте свойство (назовем его
IsSelectedInChart
) к вашему классу элементов данных. Это свойство должно быть public
и вызывать событие INotifyPropertyChanged.PropertyChanged
при каждом изменении его значения.
- В вашем
lineseries_SelectionChanged
вы найдете элемент данных, который соответствует выбранной точке, и установите для IsSelectedInChart
значение true
для нее и false
для других.
- У всех экземпляров
DataGridRow
, существующих в DataGrid
, для Binding
установлено значение Background
с Path=IsSelectedInChart
и пользовательским `IValueConverter '.
Конвертер должен выглядеть так:
public class ValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// TODO: be more careful with nulls and non-expected values
bool isSelected = (bool)value;
return isSelected ? new SolidColorBrush(Colors.Red) : DependencyProperty.UnsetValue;
}
}
Последний шаг самый хитрый. Это может быть реализовано путем переопределения DataGridRow
Style
. Один подход показан в https://stackoverflow.com/a/4268159/795861,, другой - в https://stackoverflow.com/a/3542179/795861. Проверьте их.
Все эти шаги являются обязательными, поскольку в DataGrid
может быть много строк. Он использует виртуализацию пользовательского интерфейса , что делает невозможным простую установку свойства Background
для требуемого DataGridRow
, поскольку для представления нескольких элементов данных используется объект из одной строки. Таким образом, единственный способ заставить его работать с прокруткой - привязать фон к элементам данных.
UPDATE
Чтобы выделить ячейки в столбце, известном во время разработки, задайте для свойства DataGridColumn.CellStyle это определение столбца вместо установки стиля строки:
<sdk:DataGrid>
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn x:Name="theColumnToHighlight">
<sdk:DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type sdk:DataGridCell}">
<Setter Property="local:SetterValueBindingHelper.PropertyBinding">
<Setter.Value>
<local:SetterValueBindingHelper
Type="System.Windows.Controls.Control, System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"
Property="Background"
Binding="{Binding IsSelectedInChart, Converter={StaticResource highlighterConverter}}"/>
</Setter.Value>
</Setter>
</Style>
</sdk:DataGridTextColumn.CellStyle>
</sdk:DataGridTextColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
Должно работать, хотя я не пробовал. Xaml делает то же самое, что я предложил для выделения целых строк, но применяет его к ячейкам в определенном столбце.