2016/11/23

同梱スキン - フルキーボード.xaml


スキン自作のためのテンプレート用
大量のコメントで行数は多いですが 改造しやすいようにできていますので自作のベースに最適です



<!--  This file is zeKey skinfile  https://ze-key.blogspot.jp/  -->
<!--  ↑この行はコメントですが削除しないこと!! スキンファイルとみなされなくなります  -->
<!--
  「z:DragMoveBehavior.CanMove="True"」が付いている要素がドラッグ可能エリアになります
  特に理由がなければz:Keyboardに付けておけばいいです
-->
<z:Keyboard xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:z="clr-namespace:zeKey.Skin;assembly=zeKey"
            Width="930"
            Height="295"
            z:DragMoveBehavior.CanMove="True"
            Top="100">

  <!--
    スキン作成者が用意するスキンの説明データ(zeKey上でスキンの概要に表示されます)
    このスキンの改変は自由ですが その場合はここの表記を改変者に書き換えてください
  -->
  <z:Keyboard.SkinInfo>
    <z:SkinInfo Title="フルキーボード(お手軽編集仕様)"
                Author="T.Naga"
                License="改変自由"
                Version="1.0.0">
      <z:SkinInfo.Information>
        <TextBlock TextWrapping="Wrap">
          改造が簡単にできるように 各キーをキャンバス上にべた書きしています<Run Text="&#10;" />
          位置 大きさの変更 不要なキーの削除等がVisualStudio上でマウス操作で可能です
          (そのかわり位置合わせにイライラするかもしれませんw)<Run Text="&#10;" />
          <LineBreak />
          使い方:<Run Text="&#10;" />
          クリックで通常のキー打鍵 右クリックで[Shift]+キー打鍵<Run Text="&#10;" />
          [Shift][Ctrl][Alt][Win]キーは押し込みでロックされ その他のキーが押されると同時押し
          (正確には押し込んだ時にDown送信 その他のキーのDownUpの後にUp送信)<Run Text="&#10;" />
          右クリックすると押し込み状態がもう一度押すまで継続<Run Text="&#10;" />
          <LineBreak />
          注意:<Run Text="&#10;" />
          ・一部キーは リピート無し設定になっています<Run Text="&#10;" />
          ・修飾キーが押されたままzeKeyが異常終了すると そのキーが押しっぱなしとみなされます
          その場合は(リアル)キーボードで該当キーを一度押してください<Run Text="&#10;" />
          <LineBreak />
          詳しい説明は
          <z:Hyperlink NavigateUri="https://ze-key.blogspot.jp/">ブログ</z:Hyperlink>
          を参照してください
        </TextBlock>
      </z:SkinInfo.Information>
    </z:SkinInfo>
  </z:Keyboard.SkinInfo>

  <z:Keyboard.Resources>
    <!--#endregion-->

    <!--#region 色登録
      Resourcesに登録された色は zeKey上で色変更ができるようになります(SolidColorBrushのみ)
      参照する時は{DynamicResource}にしてください 変更が反映されません(zeKeyの仕様です)
      リソースにはしたいが色変更したくない場合は Keyの先頭を_にしてください zeKey上に出なくなります-->
    <SolidColorBrush x:Key="文字" Color="Black" />
    <SolidColorBrush x:Key="キーボード 枠" Color="DimGray" />
    <SolidColorBrush x:Key="キーボード 枠IMEオン" Color="OrangeRed" />
    <SolidColorBrush x:Key="キーボード 背景" Color="#80FFE4E1" />
    <SolidColorBrush x:Key="キー 押し込み" Color="OrangeRed" />
    <SolidColorBrush x:Key="キー トグルオン" Color="OrangeRed" />
    <SolidColorBrush x:Key="キー 枠" Color="DimGray" />
    <SolidColorBrush x:Key="キー 背景" Color="Snow" />
    <SolidColorBrush x:Key="インジケータオフ" Color="DarkGray" />
    <SolidColorBrush x:Key="インジケータオン" Color="OrangeRed" />
    <SolidColorBrush x:Key="_タイトル" Color="Gray" />

    <!--
      各キーになるボタンの基底クラス(ButtonBase)のスタイル
      トグルボタンといっぺんにスタイル指定出来るようにベースクラスに一旦指定
    -->
    <Style TargetType="{x:Type ButtonBase}">
      <Setter Property="Foreground" Value="{DynamicResource 文字}" />
      <Setter Property="Background" Value="{DynamicResource キー 背景}" />
      <Setter Property="BorderBrush" Value="{DynamicResource キー 枠}" />
      <Style.Triggers>
        <Trigger Property="IsPressed" Value="True">
          <Setter Property="Background" Value="{DynamicResource キー 押し込み}" />
        </Trigger>
        <Trigger Property="ToggleButton.IsChecked" Value="True">
          <Setter Property="Background" Value="{DynamicResource キー トグルオン}" />
        </Trigger>
      </Style.Triggers>
    </Style>
    <!--
      その後各クラスにBasedOnで引き継がせる
      z:LRButton等にはデフォルトでズーム機能付き角丸キーのテンプレートがあたっていますので
      色を設定するだけですぐキーボードの見た目になります
    -->
    <Style BasedOn="{StaticResource {x:Type ButtonBase}}" TargetType="{x:Type z:LRButton}" />
    <Style BasedOn="{StaticResource {x:Type ButtonBase}}" TargetType="{x:Type z:LRRepeatButton}" />
    <Style BasedOn="{StaticResource {x:Type ButtonBase}}" TargetType="{x:Type z:LRToggleButton}" />

    <!--
      Enterキー専用にテンプレートを差し替え
      デフォルトではRectangleになっている枠部分をpathに置き換えて Enterキーに見えるように
    -->
    <Style x:Key="EnterKey"
           BasedOn="{StaticResource {x:Type z:LRRepeatButton}}"
           TargetType="{x:Type z:LRRepeatButton}">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type z:LRRepeatButton}">
            <Grid x:Name="Outer"
                  Margin="0,0,0,1"
                  RenderTransformOrigin="0.5,0.5">
              <Grid.RenderTransform>
                <ScaleTransform x:Name="ScaleTransform" />
              </Grid.RenderTransform>
              <Path Data="M6,1 L47,1 C50,1 52,3.24 52,6 L52,25 52,27 52,67 C52,70 50,72 47,72 L10,72 C7.24,72 5,70 5,67 L5,32 5,32 C2.7,31.4 1,29.4 1,27 L1,6 C1,3.24 3.24,1 6,1 z"
                    Fill="{TemplateBinding Background}"
                    Stretch="Fill"
                    Stroke="{TemplateBinding BorderBrush}"
                    StrokeThickness="2" />
              <Viewbox Margin="0,2" VerticalAlignment="Top">
                <TextBlock>
                  <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                      <Setter Property="Padding" Value="8,4" />
                      <Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}" />
                      <Setter Property="Text" Value="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" />
                    </Style>
                  </TextBlock.Style>
                </TextBlock>
              </Viewbox>
            </Grid>
            <ControlTemplate.Triggers>
              <EventTrigger RoutedEvent="UIElement.MouseEnter">
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Duration="0:0:0.1"
                                     Storyboard.TargetName="Outer"
                                     Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleX)"
                                     To="1.2" />
                    <DoubleAnimation Duration="0:0:0.1"
                                     Storyboard.TargetName="Outer"
                                     Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)"
                                     To="1.2" />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger>
              <EventTrigger RoutedEvent="UIElement.MouseLeave">
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation Duration="0:0:0.1"
                                     Storyboard.TargetName="Outer"
                                     Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleX)"
                                     To="1" />
                    <DoubleAnimation Duration="0:0:0.1"
                                     Storyboard.TargetName="Outer"
                                     Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)"
                                     To="1" />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger>
              <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Panel.ZIndex" Value="1" />
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </z:Keyboard.Resources>

  <!--  スキン上のマウスホイールで↑↓キーコードを送信  -->
  <z:Keyboard.InputBindings>
    <MouseBinding Command="{Binding TypeKeyCommand}"
                  CommandParameter="Up"
                  Gesture="{z:WheelUp}" />
    <MouseBinding Command="{Binding TypeKeyCommand}"
                  CommandParameter="Down"
                  Gesture="{z:WheelDown}" />
    <!--  左右もできますが 私は他の用途に使っているため不使用  -->
    <!--<MouseBinding Command="{Binding TypeKeyCommand}"
                  CommandParameter="Left"
                  Gesture="{z:WheelLeft}"/>
    <MouseBinding Command="{Binding TypeKeyCommand}"
                  CommandParameter="Right"
                  Gesture="{z:WheelRight}"/>-->
  </z:Keyboard.InputBindings>

  <!--  ここからスキン本体部分  -->
  <Grid>
    <!--  キーボード背景と枠部分  -->
    <Rectangle Fill="{DynamicResource キーボード 背景}"
               RadiusX="20"
               RadiusY="20"
               StrokeThickness="3">
      <Rectangle.Style>
        <Style TargetType="{x:Type Rectangle}">
          <!--  IME状態によって枠の色を変更  -->
          <Setter Property="Stroke" Value="{DynamicResource キーボード 枠}" />
          <Style.Triggers>
            <DataTrigger Binding="{Binding ModeKeys.ImeLock}" Value="true">
              <Setter Property="Stroke" Value="{DynamicResource キーボード 枠IMEオン}" />
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </Rectangle.Style>
    </Rectangle>

    <!--
      キーボードサイズに追従するViewboxの中にCanvasを置き その中に各キーを絶対位置で配置
      Viewboxの機能によりキーボードサイズに連動してサイズ調整される
    -->
    <Viewbox Stretch="Fill">
      <!--  CanvasのWidthとHeightをz:Keyboardと同じにするようにする  -->
      <Canvas Width="930" Height="295">

        <!--
          Canvas.Left Canvas.Topがすべてに必要で冗長になるが
          マウス操作で位置の変更が出来るので改造が簡単です
        -->
        <TextBlock Canvas.Left="10"
                   Canvas.Top="10"
                   FontFamily="Arial"
                   Foreground="{StaticResource _タイトル}"
                   Text="zeKey お手軽編集フルキーボード" />
        <!--#endregion-->

        <!--#region 1行目
         サイズ調整しやすい様に Width Heightもすべてに書いているが もちろんStyleに書いてもよい  
        z:LRButtonはキーリピートしないボタン z:LRRepeatButtonはリピート付き お好みで-->
        <z:LRButton Canvas.Left="20"
                    Canvas.Top="40"
                    Width="35"
                    Height="30"
                    Content="Esc"
                    TypeKey="Esc" />
        <!--
          Delay:リピートし始めるまでの間隔 Interval:その後の打ち続ける間隔
          デフォルトはWindows設定値
        -->
        <z:LRRepeatButton Canvas.Left="100"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F1"
                          Delay="1000"
                          Interval="100"
                          TypeKey="F1" />
        <z:LRRepeatButton Canvas.Left="140"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F2"
                          TypeKey="F2" />
        <z:LRRepeatButton Canvas.Left="180"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F3"
                          TypeKey="F3" />
        <z:LRRepeatButton Canvas.Left="220"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F4"
                          TypeKey="F4" />
        <z:LRRepeatButton Canvas.Left="280"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F5"
                          TypeKey="F5" />
        <z:LRRepeatButton Canvas.Left="320"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F6"
                          TypeKey="F6" />
        <z:LRRepeatButton Canvas.Left="360"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F7"
                          TypeKey="F7" />
        <z:LRRepeatButton Canvas.Left="400"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F8"
                          TypeKey="F8" />
        <z:LRRepeatButton Canvas.Left="460"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F9"
                          TypeKey="F9" />
        <z:LRRepeatButton Canvas.Left="500"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F10"
                          TypeKey="F10" />
        <z:LRRepeatButton Canvas.Left="540"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F11"
                          TypeKey="F11" />
        <z:LRRepeatButton Canvas.Left="580"
                          Canvas.Top="40"
                          Width="35"
                          Height="30"
                          Content="F12"
                          TypeKey="F12" />
        <!--#endregion-->

        <!--#region 2行目-->
        <z:LRButton Canvas.Left="20"
                    Canvas.Top="80"
                    Width="35"
                    Height="35"
                    Content="IME"
                    TypeKey="KanjiMode">
          <z:LRButton.Style>
            <!--  キーボード枠と同じようにキー枠変更  -->
            <Style BasedOn="{StaticResource {x:Type z:LRButton}}" TargetType="{x:Type z:LRButton}">
              <Style.Triggers>
                <DataTrigger Binding="{Binding ModeKeys.ImeLock}" Value="true">
                  <Setter Property="Background" Value="{DynamicResource キーボード 枠IMEオン}" />
                </DataTrigger>
              </Style.Triggers>
            </Style>
          </z:LRButton.Style>
        </z:LRButton>
        <z:LRRepeatButton Canvas.Left="60"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="1 !"
                          TypeKey="D1" />
        <z:LRRepeatButton Canvas.Left="100"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="2 &quot;"
                          TypeKey="D2" />
        <z:LRRepeatButton Canvas.Left="140"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="3 #"
                          TypeKey="D3" />
        <z:LRRepeatButton Canvas.Left="180"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="4 $"
                          TypeKey="D4" />
        <z:LRRepeatButton Canvas.Left="220"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="5 %"
                          TypeKey="D5" />
        <z:LRRepeatButton Canvas.Left="260"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="6 &amp;"
                          TypeKey="D6" />
        <z:LRRepeatButton Canvas.Left="300"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="7 '"
                          TypeKey="D7" />
        <z:LRRepeatButton Canvas.Left="340"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="8 ("
                          TypeKey="D8" />
        <z:LRRepeatButton Canvas.Left="380"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="9 )"
                          TypeKey="D9" />
        <z:LRRepeatButton Canvas.Left="420"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="0  "
                          TypeKey="D0" />
        <z:LRRepeatButton Canvas.Left="460"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="- ="
                          TypeKey="OemMinus" />
        <z:LRRepeatButton Canvas.Left="500"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="^ ~"
                          TypeKey="OemQuotes" />
        <z:LRRepeatButton Canvas.Left="537" Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="\ |"
                          TypeKey="Oem5" />
        <z:LRRepeatButton Canvas.Left="580"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="BS"
                          TypeKey="Backspace" />
        <!--#endregion-->

        <!--#region 3行目-->
        <z:LRRepeatButton Canvas.Left="20"
                          Canvas.Top="120"
                          Width="55"
                          Height="35"
                          Content="Tab"
                          TypeKey="Tab" />
        <z:LRRepeatButton Canvas.Left="80"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="q"
                          TypeKey="Q" />
        <z:LRRepeatButton Canvas.Left="120"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="w"
                          TypeKey="W" />
        <z:LRRepeatButton Canvas.Left="160"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="e"
                          TypeKey="E" />
        <z:LRRepeatButton Canvas.Left="200"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="r"
                          TypeKey="R" />
        <z:LRRepeatButton Canvas.Left="240"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="t"
                          TypeKey="T" />
        <z:LRRepeatButton Canvas.Left="280"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="y"
                          TypeKey="Y" />
        <z:LRRepeatButton Canvas.Left="320"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="u"
                          TypeKey="U" />
        <z:LRRepeatButton Canvas.Left="360"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="i"
                          TypeKey="I" />
        <z:LRRepeatButton Canvas.Left="400"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="o"
                          TypeKey="O" />
        <z:LRRepeatButton Canvas.Left="440"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="p"
                          TypeKey="P" />
        <z:LRRepeatButton Canvas.Left="480"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="@ `"
                          TypeKey="Oem3" />
        <z:LRRepeatButton Canvas.Left="520"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="[ {"
                          TypeKey="OemOpenBrackets" />

        <z:LRRepeatButton Canvas.Left="560"
                          Canvas.Top="120"
                          Width="55"
                          Height="75"
                          Content="Enter"
                          Style="{StaticResource EnterKey}"
                          TypeKey="Enter" />
        <!--#endregion-->

        <!--#region 4行目-->
        <z:LRButton Canvas.Left="20"
                    Canvas.Top="160"
                    Width="59"
                    Height="35"
                    Content="Caps"
                    TypeKey="CapsLock">
          <z:LRButton.Style>
            <Style BasedOn="{StaticResource {x:Type z:LRButton}}" TargetType="{x:Type z:LRButton}">
              <Style.Triggers>
                <DataTrigger Binding="{Binding ModeKeys.CapsLock}" Value="true">
                  <Setter Property="Background" Value="{DynamicResource キー トグルオン}" />
                </DataTrigger>
              </Style.Triggers>
            </Style>
          </z:LRButton.Style>
        </z:LRButton>
        <z:LRRepeatButton Canvas.Left="84"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="a"
                          TypeKey="A" />
        <z:LRRepeatButton Canvas.Left="124"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="s"
                          TypeKey="S" />
        <z:LRRepeatButton Canvas.Left="164"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="d"
                          TypeKey="D" />
        <z:LRRepeatButton Canvas.Left="204"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="f"
                          TypeKey="F" />
        <z:LRRepeatButton Canvas.Left="244"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="g"
                          TypeKey="G" />
        <z:LRRepeatButton Canvas.Left="284"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="h"
                          TypeKey="H" />
        <z:LRRepeatButton Canvas.Left="324"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="j"
                          TypeKey="J" />
        <z:LRRepeatButton Canvas.Left="364"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="k"
                          TypeKey="K" />
        <z:LRRepeatButton Canvas.Left="404"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="l"
                          TypeKey="L" />
        <z:LRRepeatButton Canvas.Left="444"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="; +"
                          TypeKey="OemPlus" />
        <z:LRRepeatButton Canvas.Left="484"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content=": *"
                          TypeKey="Oem1" />
        <z:LRRepeatButton Canvas.Left="524"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="] }"
                          TypeKey="OemCloseBrackets" />
        <!--#endregion-->

        <!--#region 5行目-->
        <z:LRToggleButton Canvas.Left="20"
                          Canvas.Top="200"
                          Width="80"
                          Height="35"
                          Content="Shift"
                          TypeKey="Shift" />
        <z:LRRepeatButton Canvas.Left="105"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="z"
                          TypeKey="Z" />
        <z:LRRepeatButton Canvas.Left="145"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="x"
                          TypeKey="X" />
        <z:LRRepeatButton Canvas.Left="185"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="c"
                          TypeKey="C" />
        <z:LRRepeatButton Canvas.Left="225"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="v"
                          TypeKey="V" />
        <z:LRRepeatButton Canvas.Left="265"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="b"
                          TypeKey="B" />
        <z:LRRepeatButton Canvas.Left="305"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="n"
                          TypeKey="N" />
        <z:LRRepeatButton Canvas.Left="345"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="m"
                          TypeKey="M" />
        <z:LRRepeatButton Canvas.Left="385"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content=", &lt;"
                          TypeKey="OemComma" />
        <z:LRRepeatButton Canvas.Left="425"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content=". &gt;"
                          TypeKey="OemPeriod" />
        <z:LRRepeatButton Canvas.Left="465"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="/ ?"
                          TypeKey="OemQuestion" />
        <z:LRRepeatButton Canvas.Left="505"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="\ _"
                          FontFamily="Arial"
                          TypeKey="OemBackslash" />
        <z:LRToggleButton Canvas.Left="545"
                          Canvas.Top="200"
                          Width="70"
                          Height="35"
                          Content="Shift"
                          TypeKey="RightShift" />
        <!--#endregion-->

        <!--#region 6行目-->
        <z:LRToggleButton Canvas.Left="20"
                          Canvas.Top="240"
                          Width="55"
                          Height="35"
                          Content="Ctrl"
                          TypeKey="Ctrl" />
        <z:LRToggleButton Canvas.Left="80"
                          Canvas.Top="240"
                          Width="45"
                          Height="35"
                          Content="Win"
                          TypeKey="Win" />
        <z:LRToggleButton Canvas.Left="130"
                          Canvas.Top="240"
                          Width="45"
                          Height="35"
                          Content="Alt"
                          TypeKey="Alt" />
        <z:LRButton Canvas.Left="180"
                    Canvas.Top="240"
                    Width="45"
                    Height="35"
                    Content="無変換"
                    TypeKey="ImeNonConvert" />
        <z:LRRepeatButton Canvas.Left="230"
                          Canvas.Top="240"
                          Width="115"
                          Height="35"
                          Content="Space"
                          TypeKey="Space" />
        <z:LRButton Canvas.Left="350"
                    Canvas.Top="240"
                    Width="45"
                    Height="35"
                    Content="変換"
                    TypeKey="ImeConvert" />
        <!--
          ひらがなキーの実際の挙動は複雑なんですが zeKeyでは全く考慮していません(私は使わないので)
          ファンクションキーで代用してください
        -->
        <z:LRButton Canvas.Left="400"
                    Canvas.Top="240"
                    Width="45"
                    Height="35"
                    Content="ひらがな"
                    TypeKey="OemAttn" />
        <z:LRToggleButton Canvas.Left="450"
                          Canvas.Top="240"
                          Width="35"
                          Height="35"
                          Content="Alt"
                          TypeKey="RightAlt" />
        <z:LRToggleButton Canvas.Left="490"
                          Canvas.Top="240"
                          Width="35"
                          Height="35"
                          Content="Win"
                          TypeKey="RWin" />
        <z:LRButton Canvas.Left="530"
                    Canvas.Top="240"
                    Width="35"
                    Height="35"
                    Content="App"
                    TypeKey="Apps" />
        <z:LRToggleButton Canvas.Left="570"
                          Canvas.Top="240"
                          Width="45"
                          Height="35"
                          Content="Ctrl"
                          TypeKey="RightCtrl" />
        <!--#endregion-->

        <!--#region 操作-->
        <z:LRButton Canvas.Left="625"
                    Canvas.Top="40"
                    Width="35"
                    Height="30"
                    Content="PS"
                    TypeKey="Snapshot" />
        <z:LRButton Canvas.Left="665"
                    Canvas.Top="40"
                    Width="35"
                    Height="30"
                    Content="Scroll"
                    TypeKey="Scroll" />
        <z:LRButton Canvas.Left="705"
                    Canvas.Top="40"
                    Width="35"
                    Height="30"
                    Content="Pause"
                    TypeKey="Pause" />

        <z:LRRepeatButton Canvas.Left="625"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="Ins"
                          TypeKey="Insert" />
        <z:LRRepeatButton Canvas.Left="665"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="Home"
                          TypeKey="Home" />
        <z:LRRepeatButton Canvas.Left="705"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="PgUp"
                          TypeKey="PageUp" />

        <z:LRRepeatButton Canvas.Left="625"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="Del"
                          TypeKey="Delete" />
        <z:LRRepeatButton Canvas.Left="665"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="End"
                          TypeKey="End" />
        <z:LRRepeatButton Canvas.Left="705"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="PgDn"
                          TypeKey="PageDown" />

        <z:LRRepeatButton x:Name="Up"
                          Canvas.Left="665"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="↑"
                          TypeKey="Up" />
        <z:LRRepeatButton Canvas.Left="625"
                          Canvas.Top="240"
                          Width="35"
                          Height="35"
                          Content="←"
                          TypeKey="Left" />
        <z:LRRepeatButton x:Name="Down"
                          Canvas.Left="665"
                          Canvas.Top="240"
                          Width="35"
                          Height="35"
                          Content="↓"
                          TypeKey="Down" />
        <z:LRRepeatButton Canvas.Left="705"
                          Canvas.Top="240"
                          Width="35"
                          Height="35"
                          Content="→"
                          TypeKey="Right" />
        <!--#endregion-->

        <!--#region テンキー-->
        <z:LRRepeatButton Canvas.Left="750"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="Num"
                          TypeKey="NumLock" />
        <z:LRRepeatButton Canvas.Left="790"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="/"
                          TypeKey="Divide" />
        <z:LRRepeatButton Canvas.Left="830"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="*"
                          TypeKey="Multiply" />
        <z:LRRepeatButton Canvas.Left="870"
                          Canvas.Top="80"
                          Width="35"
                          Height="35"
                          Content="-"
                          TypeKey="Subtract" />

        <z:LRRepeatButton Canvas.Left="750"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="7"
                          TypeKey="NumPad7" />
        <z:LRRepeatButton Canvas.Left="790"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="8"
                          TypeKey="NumPad8" />
        <z:LRRepeatButton Canvas.Left="830"
                          Canvas.Top="120"
                          Width="35"
                          Height="35"
                          Content="9"
                          TypeKey="NumPad9" />
        <z:LRRepeatButton Canvas.Left="870"
                          Canvas.Top="120"
                          Width="35"
                          Height="75"
                          Content="+"
                          TypeKey="Add" />

        <z:LRRepeatButton Canvas.Left="750"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="4"
                          TypeKey="NumPad4" />
        <z:LRRepeatButton Canvas.Left="790"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="5"
                          TypeKey="NumPad5" />
        <z:LRRepeatButton Canvas.Left="830"
                          Canvas.Top="160"
                          Width="35"
                          Height="35"
                          Content="6"
                          TypeKey="NumPad6" />

        <z:LRRepeatButton Canvas.Left="750"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="1"
                          TypeKey="NumPad1" />
        <z:LRRepeatButton Canvas.Left="790"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="2"
                          TypeKey="NumPad2" />
        <z:LRRepeatButton Canvas.Left="830"
                          Canvas.Top="200"
                          Width="35"
                          Height="35"
                          Content="3"
                          TypeKey="NumPad3" />
        <z:LRRepeatButton Canvas.Left="870"
                          Canvas.Top="200"
                          Width="35"
                          Height="73"
                          Content="⏎"
                          TypeKey="Return" />

        <z:LRRepeatButton Canvas.Left="750"
                          Canvas.Top="240"
                          Width="75"
                          Height="35"
                          Content="0"
                          TypeKey="NumPad0" />
        <z:LRRepeatButton Canvas.Left="830"
                          Canvas.Top="240"
                          Width="35"
                          Height="35"
                          Content="."
                          TypeKey="Decimal" />
        <!--#endregion-->

        <!--
          右クリック時の修飾キーの設定 ModifierKeysの値のOnOffによって同時押しするキーを決める
          デフォルトはShiftのみOn コメント解除して挙動を確認してください
        -->
        <!--<CheckBox Canvas.Left="270"
                  Canvas.Top="10"
                  VerticalContentAlignment="Center"
                  Content="Shift"
                  IsChecked="{Binding ModifierKeys.Shift}"/>
        <CheckBox Canvas.Left="340"
                  Canvas.Top="10"
                  VerticalContentAlignment="Center"
                  Content="Ctrl"
                  IsChecked="{Binding ModifierKeys.Ctrl}"/>
        <CheckBox Canvas.Left="410"
                  Canvas.Top="10"
                  VerticalContentAlignment="Center"
                  Content="Alt"
                  IsChecked="{Binding ModifierKeys.Alt}"/>
        <CheckBox Canvas.Left="470"
                  Canvas.Top="10"
                  VerticalContentAlignment="Center"
                  Content="Win"
                  IsChecked="{Binding ModifierKeys.Win}"/>-->

        <!--#region ロック状態インジケータ-->
        <Viewbox Canvas.Left="790"
                 Canvas.Top="34"
                 Width="35"
                 Height="35">
          <TextBlock FontFamily="Arial" TextAlignment="Center">
            <TextBlock.Style>
              <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Foreground" Value="{DynamicResource インジケータオフ}" />
                <Style.Triggers>
                  <DataTrigger Binding="{Binding ModeKeys.NumLock}" Value="true">
                    <Setter Property="Foreground" Value="{DynamicResource インジケータオン}" />
                  </DataTrigger>
                </Style.Triggers>
              </Style>
            </TextBlock.Style><Run Text="Num" />
            <LineBreak /><Run Text="Lock" /></TextBlock>
        </Viewbox>
        <Viewbox Canvas.Left="830"
                 Canvas.Top="34"
                 Width="35"
                 Height="35">
          <TextBlock FontFamily="Arial" TextAlignment="Center">
            <TextBlock.Style>
              <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Foreground" Value="{DynamicResource インジケータオフ}" />
                <Style.Triggers>
                  <DataTrigger Binding="{Binding ModeKeys.CapsLock}" Value="true">
                    <Setter Property="Foreground" Value="{DynamicResource インジケータオン}" />
                  </DataTrigger>
                </Style.Triggers>
              </Style>
            </TextBlock.Style><Run Text="Caps" />
            <LineBreak /><Run Text="Lock" /></TextBlock>
        </Viewbox>
        <Viewbox Canvas.Left="870"
                 Canvas.Top="34"
                 Width="35"
                 Height="35">
          <TextBlock FontFamily="Arial" TextAlignment="Center">
            <TextBlock.Style>
              <Style TargetType="{x:Type TextBlock}">
                <Setter Property="Foreground" Value="{DynamicResource インジケータオフ}" />
                <Style.Triggers>
                  <DataTrigger Binding="{Binding ModeKeys.ScrollLock}" Value="true">
                    <Setter Property="Foreground" Value="{DynamicResource インジケータオン}" />
                  </DataTrigger>
                </Style.Triggers>
              </Style>
            </TextBlock.Style><Run Text="Scroll" />
            <LineBreak /><Run Text="Lock" /></TextBlock>
        </Viewbox>
      </Canvas>
    </Viewbox>

    <!--  ResizeGripを↑のViewboxの中に入れないこと リサイズがバグった挙動になります  -->
    <z:ResizeGrip Background="{DynamicResource キーボード 背景}"
                  BorderBrush="{DynamicResource キーボード 枠}"
                  BorderThickness="0,0,3,3"
                  Foreground="{DynamicResource キーボード 枠}" />
    <!--  ResizeGripはデフォルトでこのスタイルがあたっています  -->
    <!--<Style TargetType="{x:Type local:ResizeGrip}">
      <Setter Property="Width" Value="20" />
      <Setter Property="Height" Value="20" />
      <Setter Property="HorizontalAlignment" Value="Right" />
      <Setter Property="VerticalAlignment" Value="Bottom" />
      <Setter Property="Cursor" Value="SizeNWSE" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type local:ResizeGrip}">
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
              <Viewbox>
                <TextBlock Background="#01FFFFFF"
                         FontFamily="Marlett"
                         FontWeight="Bold"
                         Foreground="{TemplateBinding Foreground}"
                         Text="o" />
              </Viewbox>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>-->
  </Grid>
</z:Keyboard>
<!--
  お疲れ様でした コメントが多めとはいえ1000行を超えてしまいました
  しかし4分の3は各キーの繰り返しですので 難しいのは前半のスタイルやテンプレートだと思います
  ブログで解説していますのでご覧ください
  webで「xaml」と検索して概要だけでも把握していただくと理解しやすいと思います
-->

0 件のコメント :

コメントを投稿