|
|
@@ -2,6 +2,7 @@ using System;
|
|
|
using System.Reactive.Linq;
|
|
|
using Avalonia.VisualTree;
|
|
|
using Avalonia.Controls;
|
|
|
+using Avalonia.Interactivity;
|
|
|
using ReactiveUI;
|
|
|
|
|
|
namespace Avalonia.ReactiveUI
|
|
|
@@ -25,27 +26,28 @@ namespace Avalonia.ReactiveUI
|
|
|
public IObservable<bool> GetActivationForView(IActivatableView view)
|
|
|
{
|
|
|
if (!(view is IVisual visual)) return Observable.Return(false);
|
|
|
- if (view is WindowBase window) return GetActivationForWindowBase(window);
|
|
|
+ if (view is Control control) return GetActivationForControl(control);
|
|
|
return GetActivationForVisual(visual);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// Listens to Opened and Closed events for Avalonia windows.
|
|
|
+ /// Listens to Loaded and Unloaded
|
|
|
+ /// events for Avalonia Control.
|
|
|
/// </summary>
|
|
|
- private IObservable<bool> GetActivationForWindowBase(WindowBase window)
|
|
|
+ private IObservable<bool> GetActivationForControl(Control control)
|
|
|
{
|
|
|
- var windowLoaded = Observable
|
|
|
- .FromEventPattern(
|
|
|
- x => window.Opened += x,
|
|
|
- x => window.Opened -= x)
|
|
|
+ var controlLoaded = Observable
|
|
|
+ .FromEventPattern<RoutedEventArgs>(
|
|
|
+ x => control.Loaded += x,
|
|
|
+ x => control.Loaded -= x)
|
|
|
.Select(args => true);
|
|
|
- var windowUnloaded = Observable
|
|
|
- .FromEventPattern(
|
|
|
- x => window.Closed += x,
|
|
|
- x => window.Closed -= x)
|
|
|
+ var controlUnloaded = Observable
|
|
|
+ .FromEventPattern<RoutedEventArgs>(
|
|
|
+ x => control.Unloaded += x,
|
|
|
+ x => control.Unloaded -= x)
|
|
|
.Select(args => false);
|
|
|
- return windowLoaded
|
|
|
- .Merge(windowUnloaded)
|
|
|
+ return controlLoaded
|
|
|
+ .Merge(controlUnloaded)
|
|
|
.DistinctUntilChanged();
|
|
|
}
|
|
|
|