.NET + AvaloniaUI 制作日誌①
はじめまして。プログラミングに関する技術的なメモをここで記録しておこうと思います。
(もしかしたら誰かのお役に立つこともあるかもしれないし。)
NOTEは使いやすいし見やすいけど、ちょっと分量のある技術分野のテキストだとあまり向いてない。
Avalonia v11 previewについて
Avaloniaはv11からIMEのインライン入力に対応したため、
日本語を扱いたいデスクトップアプリの場合は最新のプレビュー版を使いたいところだと思います。
しかし、いくつかの破壊的変更が行われているため、注意すべき点があります。
まずVisualStudioを使っている場合、最新のPreview版(2023/4/14時点でpreview6)では、
現在MVVMテンプレートの一部が機能しません。
- XamlNameReferenceGeneretor→内部的に統合されたそうなので、テンプレに含まれているこのNuGetパッケージは削除すること。
- IControlインターフェースは廃止されました。ViewLocatorテンプレのIControl→Controlに書き換えること。
- CommunityToolKit.MVVMを使用している場合→App.axaml.csを下記の最新のテンプレに差し替えること。
https://github.com/AvaloniaUI/avalonia-dotnet-templates/blob/5f07535d8eb4c34951f0b23fa1afd4ab1057949c/templates/csharp/app-mvvm/App.axaml.cs#L30 - RequestedThemeプロパティは廃止されました。テーマのLight、Darkの切り替えはRequestedThemeVariantプロパティを使うこと。
これを。
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:YourNameSpace"
x:Class="YourNameSpace.App">
<Application.DataTemplates>
<local:ViewLocator/>
</Application.DataTemplates>
<Application.Styles>
<FluentTheme Mode="Light"/>
</Application.Styles>
</Application>
こうする。
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:YourNameSpace"
RequestedThemeVariant="Light"
x:Class="YourNameSpace.App">
<Application.DataTemplates>
<local:ViewLocator/>
</Application.DataTemplates>
<Application.Styles>
<FluentTheme />
</Application.Styles>
</Application>
その他の雑記
-
IMEに対応したと言っても、なんかまだちょっと怪しい気がします。検証中。
-
CefGlueやCefNetはまだv11に対応していません。WebView2のラッパーもありますがv11では動かないようなので、事実上、現在v11では手軽に扱えるマルチプラットフォームのブラウザコントロールは無いと言ってよいと思います。困ったね。WebView2のMac版待ちかな…。
-
FruentAvaloniaについて
このライブラリは簡単にモダンなインターフェースを実装出来て便利なのですが、
XAML上で直接バインドできないプロパティも多くて、MVVMで扱うには色々と癖があります。(作者があんまりMVVMとかDIが好きじゃないそうです)
まず、NavigationViewやFrameコントロールはReactiveUIと相性が悪いようです。
これらのコントロールでスレッドアクセスに関するエラーが出る場合は出来ればCommunityToolKit.MVVMか、他のライブラリを試してみてください。 -
AvaloniaEditについて
現在開発しているアプリのコアになるライブラリなのですが、こちらもテキストをXAML上で直接バインドできない?ようで色々とコードビハインドの処理が必須です。あとやっぱりIME周りが怪しくて検証中。
また、preview6ではテーマの呼び出し方が変わったようです。
preview5 -> avares://AvaloniaEdit/AvaloniaEdit.xaml
master/preview6 -> avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml
ビヘイビアを使ってバインドする例が載ってた。助かる。
色々と振り回されてだいぶコードがカオスになってきたので、やっぱり個人開発のアプリだしMVVMあきらめようかなぁ。
Discussion