В данный момент я пытаюсь пройти через некоторые обручи, имея дело с событием WPF SizeChanged в окне. У меня есть некоторый пользовательский код, который мне нужно выполнить после, когда пользователь завершит изменение размера окна, к сожалению, нет события, с которым я смог столкнуться для этого, поэтому я создал решение, использующее 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, но он не срабатывает при щелчке дескриптора окна, а только при щелчке мышью внутри рамки окна. Есть ли какое-либо подобное событие, которое я могу подключить для нажатия мыши, которое применяется к дескриптору окна? Или кто-нибудь может придумать подходящее решение проблемы, с которой я столкнулся?