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

时间:2014-11-04 11:18:46

标签: c# keyboard surface

我正在尝试在单击按钮时显示键盘,但它根本没有显示键盘。 “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;
    }

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我对表面框架知之甚少;但通常你不能强制键盘出现,聚焦的对象需要接受文本作为输入。

因为按钮通常不接受文本输入,所以键盘的焦点不能给它,因此

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,因为它接受来自键盘的默认行为箭头导航,然后上面的代码应该有效。

评论中的问题

如何在非表面设备上测试? 您可以使用simulator

中应包含的2.0 sdk

如何将SurfaceTextBox中的光标位置更改为触摸的位置? 我真的不明白你的意思是'触摸它',但你可以使用select方法更改文本框中的光标位置。

yourSurfaceTextBox.Select(position, 0);

要获得可以使用的触摸位置

ReadOnlyTouchPointCollection touches = touchTarget.GetState();

然后你必须弄清楚触摸对象的位置,但我这个问题超出了原始问题的范围。

玩得开心!