Implement NavMenu to select the specified path by default

This commit is contained in:
CHINBOY
2025-10-11 21:55:13 +08:00
parent f11b224f66
commit 3e007c0905
+44 -11
View File
@@ -449,18 +449,34 @@ public class NavMenu : NavMenuBase
HandleModeChanged();
}
protected void ConfigureDefaultOpenedPaths()
private void ConfigureDefaultOpenedPaths()
{
if (DefaultOpenPaths != null)
{
foreach (var defaultOpenPath in DefaultOpenPaths)
{
var itemPath = FindMenuItemByPath(defaultOpenPath);
OpenMenuItemPaths(itemPath);
var pathNodes = FindMenuItemByPath(defaultOpenPath);
OpenMenuItemPaths(pathNodes);
}
}
}
private void ConfigureDefaultSelectedPath()
{
if (DefaultSelectedPath != null)
{
var pathNodes = FindMenuItemByPath(DefaultSelectedPath);
Dispatcher.UIThread.InvokeAsync(async () =>
{
var navMenuItems = await OpenMenuItemPathAsync(pathNodes);
foreach (var navMenuItem in navMenuItems)
{
navMenuItem.IsSelected = true;
}
});
}
}
private IList<ITreeNode> FindMenuItemByPath(TreeNodePath treeNodePath)
{
if (treeNodePath.Length == 0)
@@ -506,18 +522,34 @@ public class NavMenu : NavMenuBase
});
}
private async Task OpenMenuItemPathAsync(IList<ITreeNode> pathNodes)
private async Task<List<NavMenuItem>> OpenMenuItemPathAsync(IList<ITreeNode> pathNodes)
{
ItemsControl current = this;
foreach (var pathNode in pathNodes)
List<NavMenuItem> items = new List<NavMenuItem>();
try
{
var child = await GetNavMenuItemContainerAsync(pathNode, current);
if (child != null)
ItemsControl current = this;
foreach (var pathNode in pathNodes)
{
current = child;
child.IsSubMenuOpen = true;
var child = await GetNavMenuItemContainerAsync(pathNode, current);
if (child != null)
{
items.Add(child);
current = child;
child.IsMotionEnabled = false;
child.IsSubMenuOpen = true;
}
}
}
finally
{
foreach (var item in items)
{
item.IsMotionEnabled = true;
}
}
return items;
}
private async Task<NavMenuItem?> GetNavMenuItemContainerAsync(ITreeNode childNode, ItemsControl current)
@@ -533,7 +565,7 @@ public class NavMenu : NavMenuBase
}
else
{
break;
break;
}
--cycleCount;
}
@@ -544,5 +576,6 @@ public class NavMenu : NavMenuBase
{
base.OnLoaded(e);
ConfigureDefaultOpenedPaths();
ConfigureDefaultSelectedPath();
}
}