Я не совсем уверен, что вы подразумеваете под «фокусом» для строки, поскольку весь ваш код делает выделение строки другим цветом фона («Фокус» означает нечто иное, говоря о графическом интерфейсе). Но если предположить, что это является намерением, и предположить, что одновременно можно «сфокусировать» только одну строку, есть несколько способов выполнить то, что вы описываете. Я бы не стал делать это таким образом, но не зная больше о вашем коде и данных из того, что вы дали ...
Во-первых, когда вы выделяете указанную строку, отключите подсветку на всех других строках ...
private void FocusTableRow (object sender, RoutedEventArgs e)
{
sender.GetType ().GetProperty ("Background").SetValue (sender, Brushes.LightGray);
foreach (var row in feedTableRowGroup.Rows) {
if (row != sender) {
row.GetType ().GetProperty ("Background").SetValue (row, Brushes.White);
}
}
e.Handled = true;
}
Я также добавил e.Handled = true, чтобы сигнализировать о том, что мы обработали событие нажатия мыши, и остановить кого-либо еще от его обработки.
Затем добавьте обработчик MouseDown в feedTable (либо в ctor, либо в том месте, где вы инициализируете данные), чтобы ловить при щелчке вне строк и отключать все выделения строк ...
feedTable.MouseDown += FeedTable_MouseDown;
...
private void FeedTable_MouseDown (object sender, MouseButtonEventArgs e)
{
foreach (var row in feedTableRowGroup.Rows) {
row.GetType ().GetProperty ("Background").SetValue (row, Brushes.White);
}
}
опять-таки, не так, как я бы это сделал и, возможно, не самый удобный для WPF метод, но он будет работать с тем, что вы нам дали. Это звучит как хороший кандидат на архитектуру MVVM, хотя для этого потребуется немного перестроить весь код.