Wpf 如何从代码设置keyboardnavigation.Tabindex

Wpf 如何从代码设置keyboardnavigation.Tabindex,wpf,c#-4.0,keyboard-navigation,Wpf,C# 4.0,Keyboard Navigation,我正在绑定textbox1关于LostFocus事件的数据。我设置了键盘导航

我正在绑定
textbox1
关于
LostFocus
事件的数据。我设置了键盘导航<对于
textbox1
textbox2
键盘导航
Tabindex=7
。现在我的问题是我正在为
textbox1
执行正则表达式验证,如果我在
textbox1
中输入无效字符,它会显示
MessageBox
表示无效,单击“确定”后,它将导航到
textbox2
,在那里我要将此键盘导航设置为
textbox1
,直到我输入有效字符为止。我怎样才能做到这一点

我试着这样做:

if (!string.IsNullOrEmpty(txtbox1.Text))
{
    if(Regex.IsMatch(txtbox1.Text, @"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"))
    {
        txtbox2.Text = "(" + txtbox1.Text + ")";
    }
    else
    {
        MessageBoxResult mbr;
        mbr=MessageBox.Show("please enter valid Email Id", "VMS", MessageBoxButton.OK, MessageBoxImage.Error);

        if (mbr == MessageBoxResult.OK)
        {
            Keyboard.Focus(txtbox1);
            txtbox1.Clear();
            // txtbox1.TabIndex = 7;
            //txtbox1.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
            // txtbox2.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));
        }

        //txtbox1.Focus();                

        // KeyboardNavigation.SetTabIndex(txtbox1, 6);
     }
}
else
{
    txtbox2.Text = string.Empty;
    // txtbox1.TabIndex = 7;
    //txtbox1.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));
    //KeyboardNavigation.SetTabIndex(txtbox1, 7);
    // txtbox2.TabIndex=7;
    //Keyboard.Focus(txtbox2);
}
如果输入的文本无效,如何将键盘导航设置为
txtbox1
?任何建议

编辑:添加了xaml

  <Window x:Class="DataBinding.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
<Grid>
    <TextBox Name="txtbox1" Margin="71,22,82,195" LostFocus="txtbox1_LostFocus" />
    <TextBox Name="txtbox2" Margin="71,96,82,127" />

</Grid>


试着往回走几步。。。当我将您的代码复制到一个新项目中并添加了两个
文本框时,它已经完成了您所追求的功能。弹出了
消息框
,我点击了
确定
,焦点停留在
文本框1
。这是我所期望的行为


我建议您,将逻辑焦点转移到
textBox2
的正是您在其他地方的代码,甚至可能是您在
窗口
用户控件
上设置的属性,而
文本框

则位于其中。

但对我来说,它仍然属于文本框2。.我删除了两个文本框的xaml中的keyboardNavigation.tab。我还添加了xaml代码。.当更改事件时,我正在使用Tetxbox1的LostFocus事件中的代码LostFocus到LostKeyBoardFocus事件上述代码工作正常。很高兴您发现了问题。:)谢谢。既然我在学习WPF,你能推荐任何一本书来很好地理解WPF的概念吗。