我正在尝试在单击按钮时显示键盘,但它根本没有显示键盘。 “TEST”被打印但键盘没有显示。 我的代码是:
private SurfaceTextBox mySurfaceTextBox = new SurfaceTextBox();
void showKeyBoard(object sender, RoutedEventArgs e)
{
//System.Windows.Input.Keyboard.Focus((IInputElement)getCanvasFromButton((SurfaceButton) sender));
System.Windows.Input.Keyboard.Focus((IInputElement)mySurfaceTextBox);
Console.Write("TEST");
SurfaceKeyboard.IsVisible = true;
SurfaceKeyboard.CenterX = (float)InteractiveSurface.PrimarySurfaceDevice.Bounds.Width - (SurfaceKeyboard.Width / 2);
SurfaceKeyboard.CenterY = (float)InteractiveSurface.PrimarySurfaceDevice.Bounds.Height - (SurfaceKeyboard.Height / 2);
SurfaceKeyboard.Layout = Microsoft.Surface.KeyboardLayout.Alphanumeric;
SurfaceKeyboard.Rotation = (float)(Math.PI / 2);
SurfaceKeyboard.ShowsFeedback = false;
}
有人能帮助我吗?
答案 0 :(得分:1)
我对表面框架知之甚少;但通常你不能强制键盘出现,聚焦的对象需要接受文本作为输入。
因为按钮通常不接受文本输入,所以键盘的焦点不能给它,因此
System.Windows.Input.Keyboard.Focus((IInputElement)sender);
将被忽略。
如果想要只显示键盘,那么可以选择添加SurfaceTextBox
并将焦点放在文本框中(这样可以从按钮中删除焦点)
将此添加到您的XAML文件
<Canvas>
<s:SurfaceTextBox
Name="yourSurfaceTextBox"
Canvas.Top="200" Canvas.Left="200"
Width="100" Height="40" />
</Canvas>
void showKeyBoard(object sender, RoutedEventArgs e)
{
Console.Write("TEST");
System.Windows.Input.Keyboard.Focus((IInputElement)yourSurfaceTextBox);
// Rest of your code...
}
如果想要在按钮之间进行导航,则应考虑使用SurfaceListBox
,因为它接受来自键盘的默认行为箭头导航,然后上面的代码应该有效。
如何在非表面设备上测试? 您可以使用simulator
中应包含的2.0 sdk如何将SurfaceTextBox中的光标位置更改为触摸的位置? 我真的不明白你的意思是'触摸它',但你可以使用select方法更改文本框中的光标位置。
yourSurfaceTextBox.Select(position, 0);
要获得可以使用的触摸位置
ReadOnlyTouchPointCollection touches = touchTarget.GetState();
然后你必须弄清楚触摸对象的位置,但我这个问题超出了原始问题的范围。
玩得开心!