Browse Source

remove messy install step.

pull/2453/head
Dan Walmsley 7 years ago
parent
commit
b1125d73a1
  1. 9
      samples/ControlCatalog/MainWindow.xaml.cs
  2. 23
      src/Avalonia.Controls/Notifications/WindowNotificationManager.cs

9
samples/ControlCatalog/MainWindow.xaml.cs

@ -21,7 +21,7 @@ namespace ControlCatalog
//Renderer.DrawFps = true;
//Renderer.DrawDirtyRects = Renderer.DrawFps = true;
_notificationArea = new WindowNotificationManager
_notificationArea = new WindowNotificationManager(this)
{
Position = NotificationPosition.TopRight,
MaxItems = 3
@ -39,12 +39,5 @@ namespace ControlCatalog
theme.TryGetResource("Button", out _);
AvaloniaXamlLoader.Load(this);
}
protected override void OnTemplateApplied(TemplateAppliedEventArgs e)
{
base.OnTemplateApplied(e);
_notificationArea.Install(this);
}
}
}

23
src/Avalonia.Controls/Notifications/WindowNotificationManager.cs

@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Linq;
using System.Reactive.Linq;
using System.Threading.Tasks;
using Avalonia.Controls.Primitives;
using Avalonia.Interactivity;
@ -50,6 +51,26 @@ namespace Avalonia.Controls.Notifications
set { SetValue(MaxItemsProperty, value); }
}
public WindowNotificationManager(Window host)
{
if (VisualChildren.Count != 0)
{
Install(host);
}
else
{
IDisposable stopListening = null;
stopListening = Observable.FromEventPattern<TemplateAppliedEventArgs>(host, nameof(host.TemplateApplied))
.Subscribe(_ =>
{
stopListening.Dispose();
Install(host);
});
}
}
static WindowNotificationManager()
{
PseudoClass<WindowNotificationManager, NotificationPosition>(PositionProperty, x => x == NotificationPosition.TopLeft, ":topleft");
@ -125,7 +146,7 @@ namespace Avalonia.Controls.Notifications
_items.Remove(notification);
}
public void Install(Window host)
private void Install(Window host)
{
var adornerLayer = host.GetVisualDescendants()
.OfType<AdornerDecorator>()

Loading…
Cancel
Save