查找活动文本框WPF

时间:2011-05-03 09:16:59

标签: c# wpf

我正在使用WPF为kiosk设备创建一个入口页面。页面和键盘中有3个文本框(使用按钮创建)。在我们按下键盘按钮时执行操作想要在相应的文本框中显示文本。

需要:如何找到当前关注的文本框。

代码使用:

    void buttonElement_Click(object sender, RoutedEventArgs e)
    {
        // create variable for holding string
        String sendString = "";

        try
        {
            // stop all event handling
            e.Handled = true;
            Button btn = ((Button)sender);

            // set sendstring to key
            if (btn.Content.ToString().Length == 1 && btn.CommandParameter.ToString() != btn.Content.ToString())
            {
                sendString = btn.Content.ToString();
            }
            else
            {
                sendString = btn.CommandParameter.ToString();
            }

            // sendString = ((Button)sender).CommandParameter.ToString();
            int position = txtAuto.SelectionStart;

            // if something to send
            if (!String.IsNullOrEmpty(sendString))
            {
                // if sending a string
                if (sendString.Length > 1)
                {
                    switch (sendString)
                    {
                        case "Del":
                            if (position != txtAuto.Text.Length)
                            {
                                txtAuto.Text = txtAuto.Text.Remove(position, 1);
                                txtAuto.SelectionStart = position;
                            }
                            break;

                        case "BACKSPACE":
                            if (position != 0)
                            {
                                txtAuto.Text = txtAuto.Text.Remove(position - 1, 1);
                                txtAuto.SelectionStart = position;
                            }
                            break;

                        case "Clear":
                            txtAuto.Text = string.Empty;
                            break;
                        case "ENTER":
                            popup.IsOpen = false;
                            // lbSuggestion.ItemsSource = null;

                            this.FetchSearchResult(txtAuto.Text.Trim());
                            if (lbResult.Items.Count != 0)
                            {
                                lbResult.ScrollIntoView(lbResult.Items[0]);
                            }

                            break;
                    }
                }
                else
                {
                    txtAuto.Text = txtAuto.Text.Insert(txtAuto.SelectionStart, sendString);
                    txtAuto.SelectionStart = position + 1;
                }

                // set keyboard focus
                System.Windows.Input.Keyboard.Focus(this.txtAuto);
                // set normal focus
                this.txtAuto.Focus();
            }
        }
        catch (Exception)
        {
            // do nothing - not important for now
            Console.WriteLine("Could not send key press: {0}", sendString);
        }
    }

此代码适用于单个文本框,如何使其适用于其他文本框。

3 个答案:

答案 0 :(得分:2)

  

需要:如何找到当前关注的文本框。

您可以使用FocusManager.GetFocusedElement方法。

答案 1 :(得分:2)

如果你点击一个按钮,那么焦点就会丢失。因此,如果文本框失去焦点,您可以将最后一个聚焦文本框“保存”在类变量中。

private TextBox _currentTextbox;

private void TextBoxLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    _currentTextbox = e.Source as TextBox;
}

将此处理程序附加到所有文本框,并在函数中使用_currentTextbox

http://msdn.microsoft.com/en-us/library/aa969768.aspx

了解详情

答案 2 :(得分:1)

单击该按钮时,该按钮将获得焦点,文本框将丢失该。因此,一种方法是订阅所有文本框的LostFocus事件,并记住哪一个丢失了焦点。最后失去焦点的那个是由于点击按钮而失去焦点的那个,因此是在点击之前具有焦点的那个。