CustomScript

2018年3月8日木曜日

UWP勉強(1) WPF使いがUWPの勉強をはじめました

  • UWP
UWPの勉強をはじめました。 さて、WPFの知識だけてどこまでいけるか。
今回は簡単なツールをUWP化してみたときの感触です。



■ XAMLコントロール


WPFとはコントロールの感じが結構違うので、UWP コントロールの一覧 をざっと確認しておくのが良いと思います。

DockPanel がない!


RelativePanel で代用する。 あとは、UWP Community ToolKit に DockPanelがあるのでそれを使うとか。

ListView がなんかちがう!


列の概念がなく、WPF の ListBox に近い。
UWP にも ListBox はあるが、用途が違うらしい。特に理由がなければ ListView を使っておくのが良さそう。

WPF の ListView みたいに列項目のある一覧表示コントロール(DataGrid)がなさそう。さてどうしようか。 そのあたりを考察ているページがありました。

Grid に IsEnabled が無い!


Button コントロールとかにはあるんですけどね。Grid とか StackPanel に IsEnabled プロパティがありません。

BooleanToVisibilityConverter が無い!


自分で作る。
ValueConverter を作ることが多くなりそう。

Style の Setter に Binding が使えない!


Behaviourを使用した代替方法もありますが、発想から変えたほうが良さそう。

Style.Triggers が無い!


代わりに VisualStateManager を使用する?
ValueConverter で代用したほうが良いかも。

Visibility.Hidden が無い!


あまり困りはしませんがレイアウトくずれに注意。

「アプリケーションは、別のスレッドにマーシャリングされたインターフェイスを呼び出しました」


別スレッドからUI要素を操作しようとしたときの例外。PropertyChanged イベントを発行しただけでもアウトになる。厳しくなったなあ。

UWP と MVVM のパフォーマンスの関係


MVVMで処理が重くなる部分は排除したがってるように感じたので調べてみたところ、おおよそそんな感じでした
  • Binding は遅い。 x:Bind を使おう。
  • ICommand は遅い。 イベントハンドラーを使おう。
  • Visibilityプロパティのバインドによるロード時のコントロール非表示化は遅い。 x:Load や x:DeferLoadStrategy を使って初期化を延期しよう。


■ ファイルアクセス


おそらく一番戸惑うのがこれ。パスを指定してファイルを開くという概念は忘れよう。

ファイルの扱い方がぜんぜんちがう!


StorageFolder とか StorageFile のオブジェクトに対する操作という扱いになります。 それらをどうやって取得するかというと、システムで用意されている特定フォルダの StorageFolder を使うか、 FolderPicker 等を使用してユーザに指定させます。パスを指定して新しいオブジェクトを作るということはできません。

FilePicker等で取得したオブジェクトは履歴等に登録することが可能で、次回起動時に再利用できます。

ファイルの Drag & Drop による取り込みは可能ですが、ReadOnlyです

ファイル削除の動作がゴミ箱に対応!


自身のアプリフォルダーのファイルはそのまま削除されますが、それ以外の場所のファイルはごみ箱移動が標準動作になります。 あと、ファイルコピーとかで既にファイルが存在していた場合に、ファイル名に(2)を付加する等の回避方法が指定可能になりました。 これはうれしい。



■ 既存の外部アプリの起動方法 (調査のみ、未検証)


ツール類なんかだと外部プログラムを組み合わせて結果を得ることはよくありますが、通常は呼び出せません。
exe を Appx 内に置き、FullTrust 設定にすれば呼び出せるようです。 Appx 外の exe を呼び出すには、そういう処理を行う exe を新しく作って、それを AppService にすればよいのか?

※ FullTrust 設定にすると普通のストアアプリとしては申請できなくなるので注意。DesktopBrige を使用したアプリとして特別な申請が必要?

別解として、プロトコル登録されている UWP ならURI指定で呼び出せます



■ 今の所の感想


「UWP は今までのWindows用ソフトとは別の新しいプラットフォーム用。制限が厳しいぞ!」

UWP は今までのWIN32デスクトップアプリ(特にファイラーやツール系のアプリ)からは簡単には移行できないと感じました。困ったらWIN32APIたたけーみたいなことができないので、全く同じ機能を提供することができません。特にファイル系が致命的に概念が異なります。UIはXAMLで書けますが、重くなるものはばっさりカットされたような感じで、いろいろと発想の転換が必要になります。 つまりWindowsでない新しいプラットフォームといったほうが近いように感じます。UWPへの移行は異なるプラットフォームへの移植と捉えたほうがよさそうです。

ただ .NET Standard があるように、コア部分は共通で使えるので、その範囲であれば共有できそうです。



2018年3月5日月曜日

画像ビューアー 「NeeView」1.29 更新しました

  • WPF
画像ビューアー NeeView を 1.29 に更新しました。
主な更新は、新しい設定ウィンドウ、動画再生機能の追加、です。

1.29

(2018-03-05)

新しい設定ウィンドウ

全ての項目の見直しを行いました。
設定変更がリアルタイムに反映されるようになりました。これに伴い設定変更のキャンセルができなくなりましたのでご注意ください。 設定がファイル保存されるタイミングは、設定ウィンドウを閉じた時、アプリを終了した時になります。
設定ページの構成はおおまかには今までと同じですが、見直しに伴い移動されたり新設された項目があります。
  • 詳細設定ページは廃止されました。これまでの詳細設定項目は各設定ページに分散しています。
  • 対応形式ページが追加されました。ブックのファイル形式ごとに設定を行うようにしています。
    • 既定で有効であった標準ZIP展開の設定を追加しました。7-ZipでZIP展開を行いたい場合はこちらをOFFにしてください。
    • 「圧縮ファイルをサポートする」設定は廃止されました。各対応形式毎に機能のON/OFFを設定してください。
  • ブックの挙動に関連する設定をブック設定ページにまとめました。
  • パネルのリスト項目のフォント設定を追加しました 設定 表示 > フォント
  • コマンド設定は、編集したい項目をダブルクリックすることでコマンド設定ウィンドウを開く形式に変更しました。

動画再生

おまけ機能として、ブックとして動画を再生できようになりました。
基本的な再生機能のみとなり、サムネイルリストや自動回転、2ページ表示等、使用できない機能や設定があります。 標準では .asf .avi .mp4 .mkv .mov .wmv の拡張子を動画と認識する設定にしています。 動画再生能力はOSに依存しており、おおよそ Windows Media Player で再生できるものが再生可能です。 このため、おそらくWindows7では .mkv は再生できないと思われます。
再生時のスライダーは動画専用のもので、スライダー方向は左から右固定です。
ページ移動コマンドは再生位置の移動に対応しています。 動画専用コマンドとして「動画再生/停止」コマンドを追加しています。
動画に関する設定は 設定 対応形式 > 動画 で行います。

マウス長押し操作

  • 長押しモードにリピート入力モードを追加 設定 画像操作 > マウス操作
  • 長押しボタンを選択できるようにした。

ルーペ

  • ルーペモードでのホイール操作のON/OFF設定追加 設定 画像操作 > マウス操作
  • ルーペモードのESCキー解除のON/OFF設定追加
  • コマンド「ルーペ倍率拡大」「ルーペ倍率縮小」追加。ルーペモードでのみ機能します。
  • ルーペモードでは「スクロール+ページ移動」コマンドのスクロールを無効にするようにした

コマンド

  • スライダー方向によって移動コマンドのページ移動方向を入れ替える設定追加 設定 コマンド > コマンド全般
  • Altキーによるメニュー操作を無効にする設定追加
  • 変換、無変換キー対応
  • コマンド「拡大」「縮小」に100%を経由するコマンドパラメータ追加。デフォルトONです。
  • コマンド「ブックを削除」追加

ページ

ページの判別、ソート方法を変更しました。このため、以前とページの並び順等が変わる可能性があります。
  • ページから非表示ファイルを除外
  • ページの名前順ソートの見直し。階層を正しく解析するようにし、ディレクトリを優先するように変更
  • 「サポート外ファイルもページに含める」場合に空のフォルダーも表示するようにした

その他

  • パネル配色調整
  • フォルダーリストの場所表示、表示しきれない場合は左からトリミングするようにした
  • ページマークの一覧表示から場所の表示を削除
  • キャンバスに表示するタイトルを見やすいように調整
  • フォルダーリスト並び順にそれぞれ昇順、降順を追加
  • ページの並び順にサイズ昇順、降順を追加
  • ページリストの表示形式を保存するようにした
  • 渡されたパスをブックとして開くかページとして開くかの判定強化
  • 設定のバックアップを残せるようにした設定 全般 > 詳細設定。ストアアプリでは常に有効。
  • RAR分割ファイル専用フィルター追加。正規表現での除外はフォルダーリスト表示のフィルター用途に変更 設定 表示 > フォルダーリスト
  • 対応拡張子に .cb7 追加
  • 詳細設定「ウィンドウサイズのDPI非追従」に不具合があるため無効化

バグ修正

  • 設定ファイルが壊れることがあるバグ修正
  • 履歴リストのコンテンツ表示で場所が表示されないバグ修正
  • アニメーションGIF再生エラーでアプリ終了するバグ修正
  • 読み込んだブックと異なるフォルダーリストの場所になることがあるバグ修正
  • パネル表示したときにリストにフォーカスが移動しない不具合修正
  • NeeViewS: 使用可能メモリが少なくなっていたバグ修正
  • NeeViewS: Susieと標準の画像読み込みが共存できなくなっていたバグ修正



設定画面はWindows10の設定のデザインを真似しています。一覧性は低くなってしまいましたが、なるべく説明を多くして設定の意味をわかりやすくすることを目指したらこのデザインは1つの解なのかも。