在屏幕键盘上旋转Windows

时间:2013-08-15 07:55:40

标签: c# wpf on-screen-keyboard

目前我正在使用C#和WPF,我想创建一个多用户应用程序。我指的是multitouch tables

我正在寻找一种可以旋转多个Windows键盘的方法。

我想使用Windows键盘,因为我不可能为每种语言创建不同的键盘,包括中文,俄语,日语,希腊语等。

要显示我使用的键盘:

Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.System) + System.IO.Path.DirectorySeparatorChar + "osk.exe"); 

下面是我想要的例子。

Multiple keyboards

1 个答案:

答案 0 :(得分:1)

在带有RenderTransform的WPF中,可以大致以这种方式旋转控件:

<Label Width="50" Height="20">
    <Label.RenderTransform>
        <RotateTransform Angle="90" />
    </Label.RenderTransform>
</Label>

在这种情况下,Label旋转90度。但是Window的对象无法旋转,因为Window Chrome现在仍然由GDI呈现。

在您的情况下,我可以建议查找/创建/等键盘控件以符合您的要求。例如,我通过link找到了这样的控件:

enter image description here

要添加到控件的旋转,我在 RotateOn180 中添加了两个按钮:RotateOn360VirtualKeyboard.xaml。键盘本身位于停靠面板中,所以我写了这个:

<DockPanel Width="500" Height="200" RenderTransformOrigin="0.5,0.5">
    <DockPanel.RenderTransform>
        <RotateTransform x:Name="KeyboardRotation" Angle="0"/>
    </DockPanel.RenderTransform>

    ....

单击按钮可启动动画,从而改变旋转角度。完整的附加代码:

<Grid>
    <Grid.Triggers>
        <EventTrigger SourceName="RotateOn180" RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard Storyboard.TargetName="KeyboardRotation" Storyboard.TargetProperty="Angle">
                    <DoubleAnimation From="0" To="180" Duration="0:0:0.5" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>

        <EventTrigger SourceName="RotateOn360" RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard Storyboard.TargetName="KeyboardRotation" Storyboard.TargetProperty="Angle">
                    <DoubleAnimation From="180" To="360" Duration="0:0:0.5" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>

    <Button Name="RotateOn180" Content="RotateOn180" Width="80" Height="30" HorizontalAlignment="Left" />
    <Button Name="RotateOn360" Content="RotateOn360" Width="80" Height="30" HorizontalAlignment="Left" Margin="0,80,0,0" />

    <DockPanel Width="500" Height="200" RenderTransformOrigin="0.5,0.5">
        <DockPanel.RenderTransform>
            <RotateTransform x:Name="KeyboardRotation" Angle="0"/>
        </DockPanel.RenderTransform>

    ...Below is a standard code of project...

Output

enter image description here