Поворот Windows на экранной клавиатуре

На данный момент я работаю с C# и WPF и хочу создать многопользовательское приложение. Я указываю на мультисенсорные столы.

Я ищу способ иметь несколько клавиатур Windows, которые можно поворачивать.

Я хочу использовать клавиатуру Windows, потому что я не могу создавать разные клавиатуры для каждого языка, включая китайский, русский, японский, греческий и т. д.

Чтобы показать клавиатуру, я использую:

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

Ниже пример того, что я хочу.

Несколько клавиатур


person Ron van der Heijden    schedule 15.08.2013    source источник
comment
Вы не получите это от osk.exe, это было сделано для настольных компьютеров. Спросите у суперпользователя утилиты, которые переворачивают весь экран. В противном случае вам следует обратить внимание на мобильную среду разработки. WinRT, а не WPF.   -  person Hans Passant    schedule 15.08.2013
comment
Также я использую настольную машину. Когда я смотрю на это приложение, у меня все еще возникает ощущение что я могу добиться чего-то подобного. Он использует dll окон и использует WPF. Разве я не могу сделать что-то похожее? Или загрузите .exe в кадр и поверните кадр. Кстати, это мое первое приложение на C# :)   -  person Ron van der Heijden    schedule 15.08.2013
comment
Я правильно понимаю, что вы хотите повернуть клавиатуру на 180°?   -  person Anatoliy Nikolaev    schedule 15.08.2013
comment
@AnatoliyNikolaev Да, и 90°, когда пользователь стоит слева или справа от стола.   -  person Ron van der Heijden    schedule 16.08.2013
comment
user is standing at the left or right side - Это вы определите? Я просто могу показать, как только вращать элемент управления.   -  person Anatoliy Nikolaev    schedule 16.08.2013
comment
Чтобы уточнить, у меня есть многопользовательское приложение, использующее мультисенсорный стол. Пользователи могут стоять за столом и (в данном примере) просматривать Интернет. Так, как на моем изображении (2 пользователя с каждой стороны) или 4 пользователя с каждой стороны. Я ищу возможность поворачивать клавиатуру (и возможность иметь несколько клавиатур). В этом примере я бы использовал поворот только на 90°.   -  person Ron van der Heijden    schedule 16.08.2013


Ответы (1)


В WPF с RenderTransform можно вращать элементы управления примерно таким образом:

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

В этом случае Label поворачивается на 90 градусов. Но объекты Window нельзя поворачивать, потому что хром Window все еще визуализируется GDI прямо сейчас.

В вашем случае могу посоветовать найти/создать/etc управление клавиатурой для WPF, соответствующее вашим требованиям. Например, я нашел такой элемент управления по ссылка:

введите здесь описание изображения

Чтобы усилить вращение элемента управления, я добавил две кнопки: RotateOn180 и RotateOn360 в VirtualKeyboard.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

введите здесь описание изображения

person Anatoliy Nikolaev    schedule 16.08.2013
comment
Спасибо! Я использую эту клавиатуру lars.werner.no/?page_id=922, но не могу чтобы загрузить это приложение C++ в WPF. Не могли бы вы указать мне правильное направление? - person Ron van der Heijden; 16.08.2013
comment
@Bondye: К сожалению, я не могу точно сказать для этого случая. Я знаю, что проект C++ можно преобразовать в библиотеку DLL, а его функции можно вызывать на C# с помощью PInvoke. Ссылка1, Ссылка2. Даже если вы вызовете его на C #, я не знаю, как вы можете повернуть Window (Control?) В WPF. - person Anatoliy Nikolaev; 16.08.2013