In WPF with RenderTransform
can rotate controls approximately in this way:
<Label Width="50" Height="20">
<Label.RenderTransform>
<RotateTransform Angle="90" />
</Label.RenderTransform>
</Label>
In this case the Label
is rotated by 90 degrees. But objects of the Window
can not be rotated because the Window
chrome is still rendered by GDI right now.
In your case, I can advise to find / create / etc keyboard control for WPF that matched your requirements. For example, I found such a control by link:

To add to the rotation of the control, I added two buttons: RotateOn180
and RotateOn360
in VirtualKeyboard.xaml
. The keyboard itself is in the dock panel, so I wrote this:
<DockPanel Width="500" Height="200" RenderTransformOrigin="0.5,0.5">
<DockPanel.RenderTransform>
<RotateTransform x:Name="KeyboardRotation" Angle="0"/>
</DockPanel.RenderTransform>
....
By clicking the button starts the animation, which changes the angle of rotation. Full additional code:
<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
