在WPF中如何将注意力集中在导航到第二页的同一控件上。
例如,我有两个WPF页面" FirstPage.xaml"和" SecondPage.xaml"。在第一页,我有两个文本框和两个组合框。从FirstPage我编写一个代码,当点击第二个组合框中的空格按钮时,重定向到第二页。在第二页中,我编写了一个代码" NavigationService.GoBack();"点击按钮。 当我从SecondPage返回到FirstPage时,thr焦点仅在第一个文本框上,而不在第二个组合框上。
答案 0 :(得分:2)
使用
IInputElement focusedControl = FocusManager.GetFocusedElement(this);
在第一页中。当您从SecondPage导航回来时,只需将焦点设置为focusedControl
如果您使用键盘进行导航,请尝试
IInputElement focusedControl = Keyboard.FocusedElement;
编辑:
我建议你保留一个static
全球课程。例如:
static class Globals
{
public static IInputElement MyFocusedControl = null;
}
您现在可以使用Globals.MyFocusedControl
因此,假设 FirstPage.xaml 包含名为Button
的{{1}},请在点击中将值分配给全局静态变量事件如:
btnNavigateToNextPage
在 SecondPage.xaml 中,您可能需要private void btnNavigateToNextPage_Click(object sender, RoutedEventArgs e)
{
Globals.MyFocusedControl = FocusManager.GetFocusedElement(this); //this here is FirstPage
/*
Code here to call the second page
'
'
*/
}
才能导航回来。我们可以说它的名字是Button
。
因此,在点击事件中,您可以这样写:
btnNavigateToPreviousPage
希望这可能会让你走,如果不是一点点修补,谷歌也。这并不困难。
编辑:以下是您在评论中添加的代码段:
private void btnNavigateToPreviousPage_Click(object sender, RoutedEventArgs e)
{
/*
Code here to navigate back to the first page
'
'
*/
//Add this in the last line
Globals.MyFocusedControl.Focus(); //This will set focus to the previous control
}
在第2页:
public Page1()
{
InitializeComponent();
Globals.MyFocusedControl = txtCode; //Why are you assigning txtCode here
Globals.MyFocusedControl.Focus(); //when what you want is txtName. Remove both of these lines
}
private void txtName_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Constants.REDIRECTKEY)
{
Globals.MyFocusedControl = txtName; //Here you have assigned the control
NavigationService.Navigate(new Page2());
}
}