2016/12/31

スキン作成時の注意点

トグルボタンはFocusable="False"にセットする

<ToggleButton Focusable="False"/>
スキンを開いた直後等キーボードフォーカスが他のウィンドウにない状態の時
トグルボタンを押した後 エンターキーやスペースキーでトグルボタンが押されてしまう
トグルボタンの動作としては合っているが ソフトキーボードとしては余計な動作なのでFalseに設定し無効にする
z:LRToggleButtonはデフォルトでFalseになっているので設定不要

ControlTemplateにTargetTypeがない時のTemplateBinding

'System.NotSupportedException'
'System.Xaml.XamlObjectWriterException' が出るが普通に動いている気がする
RelativeSource TemplatedParentにするか TargetType指定で消えた

ResourcesのSolidColorBrushはソートし表示される

x:Keyの名前順にソートするので それを踏まえて名前を付けていただくと見やすくなります
スペースも許容されるので利用してください

エスケープ

xmlと同じです
よく使うもの
&: &amp;
>: &gt;
<: &lt;
": &quot;
': &apos;

&#[10進数]; または &#x[16進数];
&#10;と&#xa;はどちらも改行「\n」です

xaml固有のものは「{}」があります
""の最初に「{」を置く場合Binding等と混同しないよう"{}{"とする必要があります


スキン作成 プロジェクト

作成直後


スキン作成には要らないフォルダやファイルばかりですが特に気にしないでOKです

フォルダ構成


Skinフォルダを作成してその中にスキンを入れてください
図のようにzeKey.exeとXceed.Wpf.Toolkit.dllをコピーしておくとテストが楽になります

ファイル参照

外部ファイルの参照は
"pack://siteoforigin:,,,/Skin/image.png"や
"pack://siteoforigin:,,,/Skin/_img/image.png"のようになります


スキン整理

zeKey自体にはスキン整理機能は付いていません(外部ファイルの扱いが難しいため)
エクスプローラーで変更することになります

右クリックメニューに開くメニューがあります
変更後は再取得してください

スキン名.xaml(スキン本体)とスキン名.config(スキン設定)はセットです
リネームや移動で.configを変えなかった場合は スキン設定が初期設定に戻ります

スキン名やフォルダ名を変更したい

好きなように変更できます(_から始まる名前にするとzeKeyに表示されませんので注意)

フォルダを移動させたい

外部ファイルを使用していなければ スキンファイルを移動するだけです
同名のスキンがある時はどちらかの名前を変えてください

外部ファイルを使用している場合はスキン読み込みエラーになるので 外部ファイルも移動する必要があります
エラーにファイル名が出るので 元と同じフォルダ構成でファイルをコピーします(複数スキンで共用している場合があります 共用がなければ移動で構いません)
スキンフォルダ 
    サンプルフォルダ
        サンプル.xaml
        画像.png
となっていた場合スキンフォルダ直下におろすには
スキンフォルダ
    サンプル.xaml
    画像.png
と します

スキンフォルダ
    サンプルフォルダ
        画像フォルダ
            画像.png
        サンプル.xaml
となっている場合は
スキンフォルダ
    画像フォルダ
        画像.png
    サンプル.xaml
と なります

外部ファイル名が他のスキンで使用している外部ファイル名と被った場合 スキン内のファイル名と外部ファイル名を変えてください
スキンフォルダ
    サンプルフォルダ
        サンプル.xaml("pack://siteoforigin:,,,/Skin/画像.png")
        画像.png
        他のスキン.xaml("pack://siteoforigin:,,,/Skin/画像.png")
        画像.png
となってしまった場合
スキンフォルダ
    サンプル.xaml("pack://siteoforigin:,,,/Skin/画像1.png")
    画像1.png
    他のスキン.xaml
    画像.png
という具合です

外部ファイル指定

xamlで <Image Source="a.png" />のように指定するとexeに埋め込まれているリソースの指定になりますのでスキンでは使えません(Visual Studio上では使えるように見えるので注意)

外部ファイルを読み込む場合は
<Image Source="file:///c:/a.png" />
<Image Source="http://www.___.com/a.png" />
<Image Source="pack://siteoforigin:,,,/Skin/a.png" />
のようにするのですが file:やhttp:を許すと危険すぎるので xeKeyのスキンでは使えなくしています

pack://siteoforiginは本来zeKey.exeからの相対パス指定ですが 扱いづらいので
zeKeyでは "pack://siteoforigin:,,,/Skin/" を該当スキンのフルパスと解釈します(スキンフォルダではありません そのスキンのあるフォルダです)
必ず/Skin/と表記する必要があります

該当スキンのあるフォルダ以下しかアクセスできません

<Image Source="pack://siteoforigin:,,,/a.png" />
<Image Source="pack://siteoforigin:,,,/../a.png" />
<Image Source="pack://siteoforigin:,,,/skin/a.png" />
<Image Source="pack://siteoforigin:,,,/Skin/../a.png" />
<Image Source="pack://siteoforigin:,,,/Skin/../a/a.png" />
すべてエラー

<Image Source="pack://siteoforigin:,,,/Skin/a.png" />
<Image Source="pack://siteoforigin:,,,/Skin/a/a.png" />
OK

<Image Source="pack://siteoforigin:,,,/Skin/../Skin/a.png" />
無意味だがOK

siteoforiginの意味が違うので気持ち悪いのですが スキン作成の簡便さとスキンフォルダを変更可能にするため 現時点ではこれがよいのかなと思っています

2016/12/23

紹介動画を投稿しました

1年も掛かってるとかどうかしてるとしか思えないんですが 今年中に公開されるぎりぎりで思い切って公開しました

http://www.nicovideo.jp/watch/sm30282369

Vectorにて公開しました

http://www.vector.co.jp/soft/winnt/util/se514849.html
いつまでもだらだらやっても仕方がないので思い切って公開しました

色々思いついた機能を追加をしていたりしていたのですが ブログの説明を更新したり サンプルスキンを用意したりが面倒で 完成がのびのびになってしまい
結局自分が使わない機能をオミットしシンプルなものにしました

しかし今年中に公開される期日ぎりぎりに勢いでアップロードしてしまったので すでにバグがありますw
・タイプライター風スキンの小さいスペースキーに割り当てがない
・落書きスキンで使用しているWidth HeightのBindingが効いていない
・「エクスプローラーでスキンフォルダを開く」メニューが効かない
年明けにVer. 1.0.1に差し替えます