我试图在单击按钮时显示键盘,但它根本没有显示键盘。"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;
}
有人能帮帮我吗?
我对surface框架了解不多;但通常你不能强迫键盘出现,焦点对象需要接受文本作为输入。
因为按钮通常不接受文本输入,所以键盘的焦点不能给予它,因此
System.Windows.Input.Keyboard.Focus((IInputElement)sender);
将被忽略。
如果这个想法只是让键盘出现,那么一个选项是添加一个SurfaceTextBox
并将焦点放在文本框上(这将从按钮上删除焦点)
XAML
将此添加到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
,因为它接受键盘上的默认行为箭头导航,那么上面的代码应该可以工作。
评论中的问题
如何在非表面设备上进行测试您可以使用应该包含在2.0 sdk 中的模拟器
如何将SurfaceTextBox中的光标位置更改为它所触摸的位置我真的不明白你说的"触摸的地方"是什么意思,但你可以使用select方法更改文本框中的光标位置。
yourSurfaceTextBox.Select(position, 0);
要获得触摸位置,您可以使用
ReadOnlyTouchPointCollection touches = touchTarget.GetState();
然后你必须弄清楚触摸相对于物体的位置,但我这个问题超出了最初问题的范围。
玩得开心!