// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. //using Microsoft.MobileBlazorBindings.Core; using System; using System.Diagnostics; namespace CPF.Razor { internal class CpfElementManager : ElementManager { protected override bool IsParented(ICpfElementHandler handler) { return handler.Element.Parent != null; } protected override void AddChildElement( ICpfElementHandler parentHandler, ICpfElementHandler childHandler, int physicalSiblingIndex) { if (parentHandler.Element is CPF.Controls.Panel panel) { if (physicalSiblingIndex <= panel.Children.Count) { panel.Children.Insert(physicalSiblingIndex, childHandler.Element); } else { //Debug.WriteLine($"WARNING: {nameof(AddChildElement)} called with {nameof(physicalSiblingIndex)}={physicalSiblingIndex}, but parentControl.Controls.Count={parentHandler.Control.Controls.Count}"); panel.Children.Add(childHandler.Element); } } else if (parentHandler.Element is CPF.Controls.View win) { if (physicalSiblingIndex <= win.Children.Count) { win.Children.Insert(physicalSiblingIndex, childHandler.Element); } else { win.Children.Add(childHandler.Element); } } else if (parentHandler.Element is CPF.Controls.ContentControl contentControl) { contentControl.Content = childHandler.Element; } else { Debug.Fail("未实现添加控件"); } } protected override int GetPhysicalSiblingIndex( ICpfElementHandler handler) { return (handler.Element.Parent as CPF.Controls.Panel).Children.IndexOf(handler.Element); } protected override void RemoveElement(ICpfElementHandler handler) { if (handler.Element.Parent is CPF.Controls.Panel panel) { panel.Children.Remove(handler.Element); } else if (handler.Element.Parent is CPF.Controls.View win) { win.Children.Remove(handler.Element); } else if (handler.Element.Parent is CPF.Controls.ContentControl contentControl) { contentControl.Content = null; } else { Debug.Fail("未实现移除控件"); } } protected override bool IsParentOfChild(ICpfElementHandler parentHandler, ICpfElementHandler childHandler) { return childHandler.Element.Parent == parentHandler.Element; } } }