我的问题似乎很简单,但是无论如何我尝试的所有操作都无法达到预期效果。
在我的MainWindow中,我有一个ContentControl绑定到一个名为“ CurrentView”的变量,其中一个是ViewModel。我通过导航栏切换CurrentView。 在我的第一个视图中,有一个DataGrid。当我单击该DataGrid上的元素时,该行将以蓝色突出显示,并且选定的项将保存在我的ViewModel中。
当我现在跳到一个新的视图并返回到第一个视图时,仍然在DataGrid中选择了选定的项,但未突出显示行…
我尝试了很多事情,但以某种方式无法使行突出显示。
有什么我想念的吗?
答案 0 :(得分:1)
您需要将DataGrid
放在焦点上,以使所选行在默认情况下突出显示。例如,您可以在Focus()
事件处理程序中为要导航到的视图调用DataGrid
的{{1}}方法:
Loaded
答案 1 :(得分:1)
AFAIK,您需要专注于特定行。 我使用这种行为:
使用System.Windows; 使用System.Windows.Controls; 使用System.Windows.Input; 使用System.Windows.Interactivity;
namespace blaa
{
class DataGridRowBehavior : Behavior<DataGridRow>
{
public static bool GetIsDataGridRowFocussedWhenSelected(DataGridRow dataGridRow)
{
return (bool)dataGridRow.GetValue(IsDataGridRowFocussedWhenSelectedProperty);
}
public static void SetIsDataGridRowFocussedWhenSelected(
DataGridRow dataGridRow, bool value)
{
dataGridRow.SetValue(IsDataGridRowFocussedWhenSelectedProperty, value);
}
public static readonly DependencyProperty IsDataGridRowFocussedWhenSelectedProperty =
DependencyProperty.RegisterAttached(
"IsDataGridRowFocussedWhenSelected",
typeof(bool),
typeof(DataGridRowBehavior),
new UIPropertyMetadata(false, OnIsDataGridRowFocussedWhenSelectedChanged));
static void OnIsDataGridRowFocussedWhenSelectedChanged(
DependencyObject depObj, DependencyPropertyChangedEventArgs e)
{
DataGridRow item = depObj as DataGridRow;
if (item == null)
return;
if (e.NewValue is bool == false)
return;
if ((bool)e.NewValue)
item.Selected += OndataGridRowSelected;
else
item.Selected -= OndataGridRowSelected;
}
static void OndataGridRowSelected(object sender, RoutedEventArgs e)
{
DataGridRow row = e.OriginalSource as DataGridRow;
// If focus is already on a cell then don't focus back out of it
if (!(Keyboard.FocusedElement is DataGridCell) && row != null)
{
row.Focusable = true;
Keyboard.Focus(row);
}
}
}
}
用法:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="local:DataGridRowBehavior.IsDataGridRowFocussedWhenSelected" Value="true"/>
</Style>
</DataGrid.RowStyle>