仕事で UWP のソフトを開発しています。そもそも WPF もそこまで経験ないのに、UWPとか無茶ぶりです。
UWP、というか WinRT 使っているとWPFでできたことができないことが多々あります。
Problem
EventTriggerAction というのがあります。
XAML側で ViewModel で定義されたメソッドをイベントと結び付けたりできます。
で、何が問題、というか結び付ける対象となるイベントに制限があります。
どうも、ルーティングイベント以外を対象にすると、下記のメッセージを含む例外を投げて実行時にクラッシュします。
System.InvalidOperationException: Adding or removing event handlers dynamically is not supported on WinRT events. at System.Reflection.EventInfo.AddEventHandler(Object target, Delegate handler)
この現象、WPFでは発生しません。
Debugだけ?
ところが、不思議なことにReleaseビルドで実行すると、クラッシュはおろか、正しく動作します。
概要は下記のソースをみるとわかるかと。
スクロールバーを動かすと画面下部のTextBlockに乱数の値が表示されます。
ViewModel (ポータブル クラス ライブラリ)
1 | using Microsoft.Practices.Prism.Mvvm; |
MainWindow.xaml (UWP)
1 | <Page x:Class="UWP.MainPage" |
MainWindow.xaml (WPF)
1 | <Window x:Class="WPF.MainWindow" |
実行画面 (UWP Release Build)
Conclusion
原因は不明です。
仕方がないので、仕事ではコードビハインドにイベントハンドラを記述しています。
Source Code
https://github.com/takuya-takeuchi/Demo/tree/master/UWP/UWP1