我正在使用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);
}
}
此代码适用于单个文本框,如何使其适用于其他文本框。
答案 0 :(得分:2)
需要:如何找到当前关注的文本框。
您可以使用FocusManager.GetFocusedElement
方法。
答案 1 :(得分:2)
如果你点击一个按钮,那么焦点就会丢失。因此,如果文本框失去焦点,您可以将最后一个聚焦文本框“保存”在类变量中。
private TextBox _currentTextbox;
private void TextBoxLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
_currentTextbox = e.Source as TextBox;
}
将此处理程序附加到所有文本框,并在函数中使用_currentTextbox
。
答案 2 :(得分:1)
单击该按钮时,该按钮将获得焦点,文本框将丢失该。因此,一种方法是订阅所有文本框的LostFocus
事件,并记住哪一个丢失了焦点。最后失去焦点的那个是由于点击按钮而失去焦点的那个,因此是在点击之前具有焦点的那个。