WPF在导航返回时专注于相同的控制

时间:2017-07-17 18:44:07

标签: wpf

在WPF中如何将注意力集中在导航到第二页的同一控件上。

例如,我有两个WPF页面" FirstPage.xaml"和" SecondPage.xaml"。在第一页,我有两个文本框和两个组合框。从FirstPage我编写一个代码,当点击第二个组合框中的空格按钮时,重定向到第二页。在第二页中,我编写了一个代码" NavigationService.GoBack();"点击按钮。 当我从SecondPage返回到FirstPage时,thr焦点仅在第一个文本框上,而不在第二个组合框上。

1 个答案:

答案 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()); 
   } 
}