「WinUI3」に関する日記

アンパンマンDBとWinUI3

アンパンマンDB(記事更新)

画像の追加とちょっとした加筆です。

WinUI3(Today I Learned)

C# WinUI 3アプリでタイトルバーのアイコンをカスタマイズする方法 – マゴトログ シュミニイキル
せっかくだからアイコンも付けるかーと思ってWindowのプロパティを調べてみたら、アイコン設定用のプロパティなんかなくて、だいぶ回りくどいことが必要でした。

var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
var windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd);
var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);
appWindow.SetIcon(@"Assets/icon.ico");

アイコンなんてウィンドウの基本なのになんでだよ!

WinUI3(Today I Learned)

Slider.ThumbToolTipValueConverter プロパティ (Windows.UI.Xaml.Controls) - Windows UWP applications | Microsoft Learn
MediaPlayerElementが標準で持っている再生UIに不満があったので、自前で実装してました。
再生位置を示すシークバーにはSliderを使ったのですが、Sliderに指定できるのは単一のdouble値のみ。
当然、再生位置はTimeSpanで表されるので、doubleに変換して入れてやることになります。
そうすると当然、Sliderをつまんだときに表示されるツールチップも、デフォルトのままでは小数値が表示されます。
ということで、そのツールチップの表示変換を行うのが、ThumbToolTipValueConverterです。
IValueConverterを実装したクラスのインスタンスを渡してやると、変換されます。
表示に使うだけなので、必要なのはConvertだけで、ConvertBackは未実装のままでもなんとかなります。
これも後でまとめてQiitaあたりに書いとくか。

QiitaとNeoMupl

Qiita

先月頑張ってたやつ、Qiitaの記事に書きました。

mifumi323/WinUI3MediaPlayerElementSnapshotSample
これがサンプルプロジェクトのリポジトリ。
動画はAIで作るのもありかとは思ったのですが、大した手間でもないし、一応自作しました。
サンプル目的に都合のいい、軽くて常に動いてて端から端まで被写体があるフリー素材がすぐ見つかればそれが一番だったのですが、まあ有名どころは大きくておしゃれだったり個性が強すぎたりしましたからね。

NeoMupl

細かいことですが、ソリューションファイルが昔のままになっていたので。

アンパンマンDBとWinUI3

アンパンマンDB(記事更新)

来週の放送情報。
歴史の長いキャラで固めてきた感じですな。
食パンとジャムって一番合うのにキャラの組み合わせとしてはこれが初なんだ。

WinUI3(Today I Learned)

先日悩んでた動画スクショの件、解決しました。
CopyFrameToVideoSurface メソッドを使えばよかったのでした。
実はあの時もそのことまでは突き止めていたものの、コピー先となるIDirect3DSurfaceをどう用意すればいいのかがわからなくて詰まっていたのでした。

MediaPlayer を使ったオーディオとビデオの再生 - UWP applications | Microsoft Learn #フレーム サーバー モードでの MediaPlayer の使用

答えは結局サンプルコードの中にあったのです。
使うのはCanvasDeviceCanvasBitmapです。
WinUI3本体には入っていないので、NuGetでMicrosoft.Graphics.Win2Dを入れます。
VS2022に任せているとWinUI2用のWin2D.uwpを入れさせようとしてくるので注意です。

アンパンマンDBとWinUI 3

アンパンマンDB(記事更新)

来週の放送情報。
再放送ですな。

WinUI 3

MediaPlayerElementで今表示されている映像を静止画として使いたいけどやり方がわからぬ…。
MediaPlayer.IsVideoFrameServerEnabled プロパティあたりを使えば何かできそうな気はするけど、これを使うと画面に表示されないし…。

WinUI 3(Today I Learned)

スレッド機能の移行 - Windows apps | Microsoft Learn
WinFormsでも厄介だった非同期処理でのUI処理。
WinFormsで使ってた方法そのままは無理なので、ちょっと違う方法になります。
とはいえ、使うメソッドが変わっただけで、メソッドを一枚噛ませてやるという構造自体は変わらない模様。

ListViewBase.ScrollIntoView メソッド (Windows.UI.Xaml.Controls) - Windows UWP applications | Microsoft Learn
そんでもってこっち。
ListViewはプログラムで選択を変えても自動でそこまでスクロールしないので、同じくプログラムでスクロールさせてやる必要がありました。
とはいえ、どこまでスクロールするかを指定する必要はなく、メソッド一つでよしなにしてくれます。

アンパンマンDBとWinUI 3

アンパンマンDB(記事更新)

コラムから転記。
転記元の時点で文章がおかしな部分があったので、コラムともども修正しています。

WinUI 3(Today I Learned)

データ バインディングの詳細 - UWP applications | Microsoft Learn
これまで「Binding」によるバインディングしか使ってなかったけど、「x:Bind」によるバインディングも調べてみました。
「Binding」が動的に解決するのに対して、「x:Bind」は静的に解決するということ。
つまりまあ、コーディング中にもう既にどこからデータが来るのかわかっているということですな。
で、コーディング中に既に分かっているので、インテリセンスがどんどん自動的に候補とかを出してくれるし、実行中にデータを探しに行ったりしないので、動作も高速と。
「Binding」でしんどい部分があったから「x:Bind」を調べ始めたんですが、思ったよりだいぶいいですね。
もちろん、やりたいことを全部簡単に完全にできるというわけではないですが。

アンパンマンDBと.NET 9

アンパンマンDB(記事更新)

来週の放送情報。

.NET 9

Visual Studio本体のバージョンを上げたら.NET9が使えるようになっていました。
WinUI3試してるプロジェクトでもさっそく適用。
今のところ、ビルドが問題なくできたのを確認できただけで、新機能とかはまだ見ていません。
C#13も使えるはずなんで、コードがもっといい感じになるはずなんですよね。
いつもの流れなら、普通にプログラムを組んでいたら、コード解析が新機能を提案してくるという形で触れることになると思いますが。

アンパンマンDBとWinUI3

アンパンマンDB(記事更新)

コラムから転記。

WinUI3(Today I Learned)

ピッカーでファイルやフォルダーを開く - UWP applications | Microsoft Learn
Windows App SDK, WinUI3, Desktopでファイル選択ダイアログを表示する #C# - Qiita
ファイルダイアログを開く方法。
やっぱりWinUI3でもファイルの読み書きはしたいですからね。
エラーなく動かすためには気持ち悪いおまじない書かないといけないというのが残念なところ。
将来的に開発が進んで不要になったらいいけど、マイクロソフトのこれまでから考えると、普及しないまま開発が止まって立ち消えるというのもありうる…。

WinUI 3

Config.Netで設定読み書きうまくいきました。
デフォルト値とか項目名の別名作れたりするし、初期値→設定ファイルで上書き→コマンドライン引数でさらに上書きみたいなこともできるし、ファイルから読み込んだ設定は自動で同じファイルに保存されるし、標準のWindows.Storage.ApplicationDataよりむしろ便利。
あとは、CommandBarでツールバー的なものを作ってみたり、ページ遷移で値を受け渡すのとかやってみたり。
着実に作りたいものに近付いてきた感があります。
まあ、作ってるのは一般公開しない自分専用ツールですけどね。

アンパンマンDBとWinUI 3

アンパンマンDB(記事更新)

来週の放送情報。

WinUI 3

Windows.Storage.ApplicationData使ったら使ったでエラーが起きました。
Unpackagedだと制限かかるみたいね。
昨日紹介した記事の後半に書いてあったConfig.Netならいけるのかな?

アンパンマンDBとWinUI 3

アンパンマンDB(記事更新)

Blu-rayの情報出るの待ってたんだけど、結局なさそうだったので、DVDの情報を追加。

WinUI 3(Today I Learned)


設定ファイルはどうするのかなって思って昔ながらのSettings.settings追加してみたらこの通り。
参照が足りないといわれつつも、必要な参照は候補に出ず、どうやら昔と同じ方法では動かないようです。

Recommended way of doing user settings with WindowsAppSDK 1.0? · microsoft/WindowsAppSDK · Discussion #1478
ここを見る感じ、UWPのやり方を踏襲して、Windows.Storage.ApplicationDataを使うのがいいのかな。

WinUI 3(Today I Learned)

DataGrid - Windows Community Toolkit | Microsoft Learn
ListView クラス (Microsoft.UI.Xaml.Controls) - Windows App SDK | Microsoft Learn
これまでDataGridViewとかでやっていたことをやろうと思ったら、素直に考えればDataGrid。
ただ、WinUI 3では標準機能ではなく、NuGetでライブラリとして導入する必要があります。
標準機能にあるListViewは、ヘッダ表示とかは期待できませんが、テンプレートをうまく使えば、複数列表示も可能です。
外部依存を不必要に増やすのはあまり面白くないし、いったんListViewを試してみようかな。

ドラゴンクエスト10とWinUI 3

ドラゴンクエスト10(ミフミン)

モンスターバトルロード 協力チャレンジバトル 防衛軍
モンスターバトルロード 協力チャレンジバトル (2024/9/11)|目覚めし冒険者の広場
ひとまずミフミンだけですが、一通りやってみました。
防衛軍とかパニガルムとか、通常のモンスターバトルロードとは違うバトルもありました。
ストーリーの都合上普通には挑めないパニガルムはもちろんのこと、なんとなくしんどそうで手を付けていなかった防衛軍も今回が初挑戦でした。
究極邪教司祭とフラウソンが特に強かったですね。
究極邪教司祭に関しては前半戦がぬるかったので油断もあったかと思うのですが、フラウソンに関しては、立ち回りを理解していないと生き返ったそばから殺されていく感じ。

ピコピコハンマー
そんなわけで、イベントの報酬でアイテムも交換してきました。
以前の協力チャレンジバトルには参加してなかったので、過去の交換アイテムから見た目が面白そうなのを。

他の写真は以下から。
写真置き場「2024/09/22」

WinUI 3(Today I Learned)

Windows Controls and patterns - Windows app development - Windows apps | Microsoft Learn
このあたり見ながら、レイアウト関連いろいろ試してます。
Two-pane viewは、レスポンシブデザインっぽいことをできるやつ。
Split viewは、横から別画面がにゅっと出てきて、元の画面にかぶさる(or並ぶ)やつ。
Split viewのInlineは切り替え時のアニメーションがおかしくなってるから、コンパクトサイズ0のCompactInlineで実装する必要がありそう。いずれ直るかもだけど。

それとは別になるけど、
2 ページ間でのピア ツー ピアのナビゲーション - Windows apps | Microsoft Learn
完全に別画面に切り替えるならWPFのころから使えたPageをFrameに出す感じですね。

WinUI 3(Today I Learned)

MediaPlayerElement クラス (Windows.UI.Xaml.Controls) - Windows UWP applications | Microsoft Learn
WinUI 3で動画再生するにはMediaPlayerElementを使えばいいみたい。
メディアプレイヤーを作りたければメディアプレイヤーを使う、わかりやすくていいね!
ただ、1コマ戻す機能が1/24秒固定だったり、妙なところで不便さがある感じ。
1コマ進めるほうはちゃんと1コマのようだけど。

WinUI 3

埋め込みリソースから画像を表示する方法がわからん。
実行ファイルやDLLと一緒にファイルとして配置したものから表示するのは簡単にできたけど。
本来はパッケージ化して使うものだからファイルとして配置しても大丈夫ってことなのかな。
非パッケージ化で使いたいんだけどな。

WinUI 3

高DPI対応、そもそも古いフレームワークで対応しようとするから面倒なんじゃないかと考えて、現状最新の.NET用Windowsデスクトップアプリケーション用フレームワーク「WinUI 3」を試してみました。
WinUI 3 - Windows apps | Microsoft Learn

UWPみたいに新しめなUI使えて、それでいてUWPみたいな制限は少なく、普通のEXEファイルとしてもビルドできます。
任意のプロセスの起動とか、Windows APIも呼び出せます。
もちろん、高DPI対応は、もっとも正確にDPI対応が行われるPerMonitorV2。

試しに画像と文字を置いてみました。


これは等倍。
画像ははっきりくっきり、文字も普通にいい感じですね。


これが200%。
画像は拡大されました。
ぼやけてしまいましたが、元の解像度が低かったし、これが本来の動作なのでとりあえずOKです。
文字はより一層はっきりくっきりして、高DPIに求めているものがしっかり出てくれた感じですね。

複数ウィンドウを扱うのができるかどうかが今ちょっとわからないのですが、一画面で収まるものなら問題なくできそう。

あと、DPI変更に反応して画像を差し替えるみたいなこともできたらいいですね。
このあたりかな。
How to get DPI with WinUI 3? - Microsoft Q&A

CharTypeShufflerとキャラ倉庫

CharTypeShuffler


mifumi323/CharTypeShuffler: 文章を入力すると、ひらがなカタカナ大文字小文字全角半角をごちゃ混ぜにして出力するろくでもないアプリ。
5年ほど前に思い付いたクソアプリ、CharacterHarasserから名前を変えて開発開始です☠
WinUI3の練習にはちょうどいいかと。
とりあえず今は、半角英字の大文字小文字反転だけです。
本当は反転じゃなくてランダムにシャッフルしたいし、いろんな文字をシャッフル対象にしたいので、まだまだこれからです。

キャラ倉庫

二次創作のガイドライン – 美文のキャラ倉庫
二次創作のガイドラインを設置しました。
ライセンスは以前うちまととかTGWSでやっていたころよりちょっと厳しくなっています。
まあ、同人と広告を除く商用禁止条項なんで、ファンアートの範疇ならむしろ無制限に近いライセンスですが。
基本的には、キャラ名か作者名を記載してくれればOKです。

WinUI 3とアンパンマンDB

WinUI 3

Windows App SDK を使用して新しいプロジェクトを作成する - Windows apps | Microsoft Docs
いつぞやのProject Reunionの正式版ですね。
ちょっと触った感じでは、UWPと大差ない感じ?
グラフィカルなツールが、エラーで使えませんでした。
やりたいことも別に定まってないし、まだまだ様子見かな。

アンパンマンDB

PHPバージョンアップに伴う微妙なエラー、アンパンマンDBを中心に起こっているので、そちらを重点的に修正中です。