【发布时间】:2019-03-23 05:02:05
【问题描述】:
DataGrid 位于Tab1。如果我位于Tab2 并单击Tab1 标题,程序将切换到Tab1 并且DataGrid 滚动到正确位置的视图中,但选定的Row 不会获得焦点(突出显示) 除非我再次单击 Tab1 标题。其余代码触发就好了。
CS
private void Tab1_Clicked(object sender, MouseButtonEventArgs e)
{
if (dg_address.SelectedIndex > -1)
{
dg_address.ScrollIntoView(dg_address.Items[dg_address.SelectedIndex]);
DataGridRow row = (DataGridRow)dg_address.ItemContainerGenerator.ContainerFromIndex(dg_address.SelectedIndex);
row.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}
}
XAML
<TabControl x:Name="tab_control"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="#FFE5E5E5">
<TabItem>
<TabItem.Header>
<Label Content="Seznam"
MouseLeftButtonDown="Tab1_Clicked"/>
</TabItem.Header>
【问题讨论】:
-
尝试使用
Dispatcher.InvokeAsync(() => ... )执行您的代码以设置具有各种优先级的焦点(通常您需要Render以确保WPF 完成渲染所需的一切)。由于 wpf 的某些延迟(排队)性质,这是此类情况下的“第一步”解决方案。 -
@Sinatr 你愿意解释一下 Dispatcher.InvokeAsync(() => ... ) 和 Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => ... ) 之间的区别吗,我是 C# 的新手,这两种方法产生相同的结果。
-
@Sinatr 自己找到了答案:stackoverflow.com/questions/13412670/…
标签: c# .net wpf tabcontrol