Avalonia on Linux
LinuxでWPFが書けるAvaloniaを使ってみたところいきなり躓いたのでメモ。
dotnet coreはバージョン2.1および3.0、Avaloniaはバージョン0.8.3を使用していた。
事象
文字列を表示するコントロール(TextBox、TextBlock、Button……)で文字が表示されない。
これはプロパティに直接記述しようとBindingしようと変わらない。
なおウィンドウのタイトルバーには文字列が正常に表示されている。
<!--これをビルドして動かしても画面に文字が表示されない-->
<TextBox Text="Hello"/>
<!--こちらでも表示されない-->
<TextBox Text="{Binding Path=Message}"/>
簡単に再現するには(avaloniaのテンプレートをインストールした状態で)
$ dotnet new avalonia.mvvm --name TestApp
$ cd TestApp
$ dotnet run
すればテンプレートで生成されたコードのなかに
MainWindow.xaml
<TextBlock Text="{Binding Greeting}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
があるためそこで発生する。
犯人
ロケールが原因らしい。
対策
実行するときなら
$ LANG=C dotnet TestApp.dll
でデフォルトロケールで実行すればよい。
おそらくLinuxでAvaloniaを使って開発するならVisual Studio Codeを使うひとが多数だと思うが、その場合開発中はlaunch.jsonに
launch.json
"configurations":[{//略"env":{"LANG":"C"}}]
といった感じでenvの指定を入れておけばデバッグ時にLANG=Cを渡して起動してくれる。
Avaloniaのアナウンス
ロードマップによるとやはりVersion 0.8.3時点ではCJKサポートはまだ弱かったらしい。しかし0.9 releaseで大幅強化が目指されているようなので期待していたい。