зеркало из https://github.com/DeGsoft/maui-linux.git
83 строки
1.8 KiB
C#
83 строки
1.8 KiB
C#
using System.Collections.ObjectModel;
|
|
using Windows.UI.Xaml;
|
|
using Windows.UI.Xaml.Automation.Peers;
|
|
|
|
namespace Xamarin.Forms.Platform.UWP
|
|
{
|
|
public class PageRenderer : VisualElementRenderer<Page, FrameworkElement>
|
|
{
|
|
bool _disposed;
|
|
|
|
bool _loaded;
|
|
|
|
protected override AutomationPeer OnCreateAutomationPeer()
|
|
{
|
|
// Pages need an automation peer so we can interact with them in automated tests
|
|
return new FrameworkElementAutomationPeer(this);
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (!disposing || _disposed)
|
|
return;
|
|
|
|
_disposed = true;
|
|
|
|
if (Element != null)
|
|
{
|
|
ReadOnlyCollection<Element> children = ((IElementController)Element).LogicalChildren;
|
|
for (var i = 0; i < children.Count; i++)
|
|
{
|
|
var visualChild = children[i] as VisualElement;
|
|
visualChild?.Cleanup();
|
|
}
|
|
Element?.SendDisappearing();
|
|
}
|
|
|
|
base.Dispose();
|
|
}
|
|
|
|
protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
|
|
{
|
|
base.OnElementChanged(e);
|
|
|
|
e.OldElement?.SendDisappearing();
|
|
|
|
if (e.NewElement != null)
|
|
{
|
|
if (e.OldElement == null)
|
|
{
|
|
Loaded += OnLoaded;
|
|
Tracker = new BackgroundTracker<FrameworkElement>(BackgroundProperty);
|
|
}
|
|
|
|
if (!string.IsNullOrEmpty(Element.AutomationId))
|
|
{
|
|
SetAutomationId(Element.AutomationId);
|
|
}
|
|
|
|
if (_loaded)
|
|
e.NewElement.SendAppearing();
|
|
}
|
|
}
|
|
|
|
void OnLoaded(object sender, RoutedEventArgs args)
|
|
{
|
|
var carouselPage = Element?.Parent as CarouselPage;
|
|
if (carouselPage != null && carouselPage.Children[0] != Element)
|
|
{
|
|
return;
|
|
}
|
|
_loaded = true;
|
|
Unloaded += OnUnloaded;
|
|
Element?.SendAppearing();
|
|
}
|
|
|
|
void OnUnloaded(object sender, RoutedEventArgs args)
|
|
{
|
|
Unloaded -= OnUnloaded;
|
|
_loaded = false;
|
|
Element?.SendDisappearing();
|
|
}
|
|
}
|
|
} |