Surface sdk 2.0键盘未在应用程序中显示



我试图在单击按钮时显示键盘,但它根本没有显示键盘。"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();

然后你必须弄清楚触摸相对于物体的位置,但我这个问题超出了最初问题的范围。

玩得开心!

相关内容

最新更新