根元素设置逻辑焦点元素
FocusManager.FocusedElement="{Binding ElementName=grid}"
需要焦点的元素
具体如下
keydown 事件处理
private StringBuilder _cache=new StringBuilder();
private void ScanPay_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
string barcode = _cache.ToString();
_cache.Clear();
ViewModel.ScanPayCommand.Execute(barcode);
}
else
{
bool isPressedShiftKey = e.KeyboardDevice.Modifiers.HasFlag(ModifierKeys.Shift);
string value = KeyBoardHelper.ParseKeyCode(isPressedShiftKey, e.Key);
_cache.Append(value);
}
}
key序列需要自己转换key到string
///
/// 解析KEY.
///
///
///
///
public static string ParseKeyCode(bool bShift, Key keyCode)
{
string keyName = "";
if (keyCode >= Key.A && keyCode <= Key.Z)
{
keyName = keyCode.ToString();
}
else if (keyCode >= Key.D0 && keyCode <= Key.D9)
{
if (bShift)
{
switch (keyCode)
{
case Key.D0:
keyName = ")";
break;
case Key.D1:
keyName = "!";
break;
case Key.D2:
keyName = "@";
break;
case Key.D3:
keyName = "#";
break;
case Key.D4:
keyName = "$";
break;
case Key.D5:
keyName = "%";
break;
case Key.D6:
keyName = "^";
break;
case Key.D7:
keyName = "&";
break;
case Key.D8:
keyName = "*";
break;
case Key.D9:
keyName = "(";
break;
}
}
else
{
keyName = keyCode.ToString();
keyName = keyName.Substring(1, 1);
}
}
else if (keyCode >= Key.NumPad0 && keyCode <= Key.NumPad9)
{
keyName = keyCode.ToString(); //NumPad0
keyName = keyName.Substring(6, 1);
}
else
{
switch (keyCode)
{
case Key.Space:
keyName = " ";
break;
case Key.Add:
keyName = "+";
break;
case Key.Subtract:
keyName = "-";
break;
case Key.Divide:
keyName = "/";
break;
case Key.Multiply:
keyName = "*";
break;
case Key.Decimal:
keyName = ".";
break;
case Key.OemMinus:
if (bShift)
keyName = "_";
else
keyName = "-";
break;
case Key.OemPlus:
if (bShift)
keyName = "+";
else
keyName = "=";
break;
case Key.Oem6:
if (bShift)
keyName = "}";
else
keyName = "]";
break;
case Key.OemOpenBrackets:
if (bShift)
keyName = "{";
else
keyName = "[";
break;
case Key.Oem1:
if (bShift)
keyName = ":";
else
keyName = ";";
break;
case Key.Oem7:
if (bShift)
keyName = "\"";
else
keyName = "'";
break;
case Key.Oem5:
if (bShift)
keyName = "|";
else
keyName = "\\";
break;
case Key.OemComma:
if (bShift)
keyName = "<";
else
keyName = ",";
break;
case Key.OemPeriod:
if (bShift)
keyName = ">";
else
keyName = ".";
break;
case Key.OemQuestion:
if (bShift)
keyName = "?";
else
keyName = "/";
break;
case Key.Home:
case Key.End:
case Key.Insert:
case Key.Delete:
case Key.Tab:
case Key.Up:
case Key.Down:
case Key.Left:
case Key.Right:
keyName = keyCode.ToString();
break;
default:
//keyName = keyCode.ToString();
break;
}
}
if (bShift)
{
return keyName.ToUpper();
}
else
{
return keyName.ToLower();
}
}
jianshu.com/p/f88467aa2544