fix: fix menu root find in popup.

This commit is contained in:
rabbitism
2023-06-23 11:55:35 +08:00
parent 12da057f35
commit b69f118063

View File

@@ -82,7 +82,13 @@ public class NavigationMenuItem: HeaderedSelectingItemsControl
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
_rootMenu = this.FindAncestorOfType<NavigationMenu>();
}
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
GetRootMenu();
if (ItemTemplate == null && _rootMenu?.ItemTemplate != null)
{
SetCurrentValue(ItemTemplateProperty, _rootMenu.ItemTemplate);
@@ -98,6 +104,20 @@ public class NavigationMenuItem: HeaderedSelectingItemsControl
Level = CalculateDistanceFromLogicalParent<NavigationMenu>(this) - 1;
}
private void GetRootMenu()
{
_rootMenu = this.FindAncestorOfType<NavigationMenu>();
if (_rootMenu is null)
{
var popupRoot = TopLevel.GetTopLevel(this) as PopupRoot;
if (popupRoot?.Parent is Popup popup)
{
Control? c = popup.PlacementTarget;
_rootMenu = c.FindAncestorOfType<NavigationMenu>();
}
}
}
protected override void OnPointerPressed(PointerPressedEventArgs e)
{
base.OnPointerPressed(e);