4

SizeChangedウィンドウでの WPF のイベントを処理する際に、現時点でいくつかのフープを飛び越えようとしています。ユーザーがウィンドウのサイズ変更を完了した後に実行する必要があるカスタム コードがいくつかありますが、残念ながらこれに遭遇したイベントはありません。そのため、Reactive Extensions を使用して SizeChange イベントを調整するソリューションを作成しました。

IObservable<SizeChangedEventArgs> ObservableSizeChanges = Observable
    .FromEventPattern<SizeChangedEventArgs>(this, "SizeChanged")
    .Select(x => x.EventArgs)
    .Throttle(TimeSpan.FromMilliseconds(200));

IDisposable SizeChangedSubscription = ObservableSizeChanges
    .ObserveOn(SynchronizationContext.Current)
    .Subscribe(x => {
        Size_Changed(x);
    });

基本的にこれが行うことは、カスタム コードを呼び出す前に 200 ミリ秒の SizeChanged イベントが発生しないことを保証することです。これは問題なく動作しますが、ユーザーがウィンドウ ハンドルをドラッグしてマウス ボタンを押し続けると、コードがまだ実行されるという問題が発生しました。マウス ボタンを押している間はカスタム コードを実行できないようにしたいと考えています。プラグインを試みましPreviewMouseLeftButtonDownたが、ウィンドウハンドルがクリックされたときに起動されず、ウィンドウのフレーム内でマウスがクリックされたときにのみ起動されます。ウィンドウハンドルに適用されるマウスダウンのためにプラグインできる同様のイベントはありますか? または、私が抱えている問題の適切な回避策を考えられる人はいますか?

4

2 に答える 2