在我的TextBox中编写<period>应该执行选项卡</period>

时间:2010-09-24 11:54:06

标签: wpf xaml textbox wpf-controls

当我将<period>写入myTextBox时,我想要执行myOtherText.Focus

任何人都知道在xaml代码中执行此操作的方法吗?

编辑:同意我要求的orginale解决方案有点hacky。所以我改变了问题。 :)

1 个答案:

答案 0 :(得分:1)

我认为你不能用XAML解决这个问题。至少没有任何理智的方式。

您可以做的是收听文本框控件上的KeyDown或KeyUp事件,并相应地移动焦点。根据您是否要显示点,您可以选择要收听哪些事件:

  • 要让点出现在第一个(原始)文本框中,请在KeyUp
  • 时收听e.Key == Key.0emPeriod并移动焦点
  • 要让点出现在第二个文本框中,请在KeyDown
  • 时收听e.Key == Key.0emPeriod并移动焦点
  • 要点不显示 ,请听取KeyDown并在e.Key == Key.0emPeriod时移动焦点,并在e.Handled后设置true移动焦点(在KeyDown事件处理程序中)

此代码可以将焦点移动到Tab键顺序中的下一个:

private void MoveFocus(TextBox from)
{
    // Assuming the logical parent is a panel (grid, stackpanel etc.) and 
    // that the element to move focus to is also in the same panel after 
    // the current one
    // This will break if you have a more complex layout
    var panel = from.Parent as Panel;
    if (panel == null)
        return;
    var pos = panel.Children.IndexOf(from);
    for (int i = pos + 1; i < panel.Children.Count; i++)
    {
        UIElement child = panel.Children[i];
        if (KeyboardNavigation.GetIsTabStop(child))
        {
            child.Focus();
            break;
        }
    }
}

当然,如果您始终知道要将焦点移动到的控件的名称,您可以说:

myOtherTextBox.Focus();

而不是浏览面板的子集合。