Browse Source

add TopLevel.GetTopLevel api

pull/9973/head
Emmanuel Hansen 4 years ago
parent
commit
79b30658f1
  1. 2
      samples/ControlCatalog/Pages/DialogsPage.xaml.cs
  2. 2
      samples/ControlCatalog/Pages/NotificationsPage.xaml.cs
  3. 2
      src/Avalonia.Controls/ComboBox.cs
  4. 2
      src/Avalonia.Controls/Primitives/OverlayPopupHost.cs
  5. 2
      src/Avalonia.Controls/Primitives/Popup.cs
  6. 10
      src/Avalonia.Controls/TopLevel.cs
  7. 3
      src/Avalonia.Native/AvaloniaNativeDragSource.cs
  8. 3
      src/Windows/Avalonia.Win32/Input/WindowsMouseDevice.cs

2
samples/ControlCatalog/Pages/DialogsPage.xaml.cs

@ -397,7 +397,7 @@ CanPickFolder: {storageProvider.CanPickFolder}";
} }
Window GetWindow() => this.VisualRoot as Window ?? throw new NullReferenceException("Invalid Owner"); Window GetWindow() => this.VisualRoot as Window ?? throw new NullReferenceException("Invalid Owner");
TopLevel GetTopLevel() => this.VisualRoot as TopLevel ?? throw new NullReferenceException("Invalid Owner"); TopLevel GetTopLevel() => TopLevel.GetTopLevel(this) ?? throw new NullReferenceException("Invalid Owner");
private void InitializeComponent() private void InitializeComponent()
{ {

2
samples/ControlCatalog/Pages/NotificationsPage.xaml.cs

@ -27,7 +27,7 @@ namespace ControlCatalog.Pages
{ {
base.OnAttachedToVisualTree(e); base.OnAttachedToVisualTree(e);
_viewModel.NotificationManager = new Avalonia.Controls.Notifications.WindowNotificationManager(VisualRoot as TopLevel); _viewModel.NotificationManager = new Avalonia.Controls.Notifications.WindowNotificationManager(TopLevel.GetTopLevel(this));
} }
} }
} }

2
src/Avalonia.Controls/ComboBox.cs

@ -383,7 +383,7 @@ namespace Avalonia.Controls
_subscriptionsOnOpen.Clear(); _subscriptionsOnOpen.Clear();
var toplevel = this.GetVisualRoot() as TopLevel; var toplevel = TopLevel.GetTopLevel(this);
if (toplevel != null) if (toplevel != null)
{ {
toplevel.AddDisposableHandler(PointerWheelChangedEvent, (s, ev) => toplevel.AddDisposableHandler(PointerWheelChangedEvent, (s, ev) =>

2
src/Avalonia.Controls/Primitives/OverlayPopupHost.cs

@ -123,7 +123,7 @@ namespace Avalonia.Controls.Primitives
public static IPopupHost CreatePopupHost(Visual target, IAvaloniaDependencyResolver? dependencyResolver) public static IPopupHost CreatePopupHost(Visual target, IAvaloniaDependencyResolver? dependencyResolver)
{ {
var platform = (target.GetVisualRoot() as TopLevel)?.PlatformImpl?.CreatePopup(); var platform = TopLevel.GetTopLevel(target)?.PlatformImpl?.CreatePopup();
if (platform != null) if (platform != null)
return new PopupRoot((TopLevel)target.GetVisualRoot()!, platform, dependencyResolver); return new PopupRoot((TopLevel)target.GetVisualRoot()!, platform, dependencyResolver);

2
src/Avalonia.Controls/Primitives/Popup.cs

@ -358,7 +358,7 @@ namespace Avalonia.Controls.Primitives
return; return;
} }
var topLevel = placementTarget.VisualRoot as TopLevel; var topLevel = TopLevel.GetTopLevel(placementTarget);
if (topLevel == null) if (topLevel == null)
{ {

10
src/Avalonia.Controls/TopLevel.cs

@ -341,6 +341,16 @@ namespace Avalonia.Controls
{ {
return PlatformImpl?.PointToScreen(p) ?? default; return PlatformImpl?.PointToScreen(p) ?? default;
} }
/// <summary>
/// Gets the <see cref="TopLevel" /> for which the given <see cref="Visual"/> is hosted in.
/// </summary>
/// <param name="visual">The visual to query its TopLevel</param>
/// <returns>The TopLevel</returns>
public static TopLevel? GetTopLevel(Visual? visual)
{
return visual == null ? null : visual.VisualRoot as TopLevel;
}
/// <summary> /// <summary>
/// Creates the layout manager for this <see cref="TopLevel" />. /// Creates the layout manager for this <see cref="TopLevel" />.

3
src/Avalonia.Native/AvaloniaNativeDragSource.cs

@ -6,7 +6,6 @@ using Avalonia.Input;
using Avalonia.Input.Platform; using Avalonia.Input.Platform;
using Avalonia.Interactivity; using Avalonia.Interactivity;
using Avalonia.Native.Interop; using Avalonia.Native.Interop;
using Avalonia.VisualTree;
namespace Avalonia.Native namespace Avalonia.Native
{ {
@ -26,7 +25,7 @@ namespace Avalonia.Native
if (element == null) if (element == null)
return null; return null;
var visual = (Visual)element; var visual = (Visual)element;
return visual.GetVisualRoot() as TopLevel; return TopLevel.GetTopLevel(visual);
} }
class DndCallback : NativeCallbackBase, IAvnDndResultCallback class DndCallback : NativeCallbackBase, IAvnDndResultCallback

3
src/Windows/Avalonia.Win32/Input/WindowsMouseDevice.cs

@ -1,7 +1,6 @@
using System; using System;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input; using Avalonia.Input;
using Avalonia.VisualTree;
using Avalonia.Win32.Interop; using Avalonia.Win32.Interop;
namespace Avalonia.Win32.Input namespace Avalonia.Win32.Input
@ -34,7 +33,7 @@ namespace Avalonia.Win32.Input
protected override void PlatformCapture(IInputElement element) protected override void PlatformCapture(IInputElement element)
{ {
var hwnd = (((element as Visual)?.GetVisualRoot() as TopLevel)?.PlatformImpl as WindowImpl) var hwnd = (TopLevel.GetTopLevel(element as Visual)?.PlatformImpl as WindowImpl)
?.Handle.Handle; ?.Handle.Handle;
if (hwnd.HasValue && hwnd != IntPtr.Zero) if (hwnd.HasValue && hwnd != IntPtr.Zero)

Loading…
Cancel
Save