using Microsoft.UI.Xaml.Media; using XFEExtension.NetCore.WinUIHelper.Utilities.Additions; namespace XFEExtension.NetCore.WinUIHelper.Utilities.Helpers; /// /// 权限帮助类 /// public static class PermissionHelper { /// /// 设置可见性 /// /// /// public static void SetVisibility(UIElement uIElement, int currentPermission) => uIElement.Visibility = PermissionAddition.GetRequiredPermission(uIElement) <= currentPermission ? Visibility.Visible : Visibility.Collapsed; /// /// 设置可见性 /// /// /// public static void SetVisibility(IList menuItems, int currentPermission) { foreach (var menuItem in menuItems.OfType()) { SetVisibility(menuItem, currentPermission); if (menuItem.MenuItems.Count > 0) { SetVisibility(menuItem.MenuItems, currentPermission); } } } /// /// 设置子节点可见性 /// /// /// public static void SetChildVisibility(UIElement parent, int currentPermission) { foreach (var child in FindElementsWithAttachedProperty(parent, PermissionAddition.RequiredPermissionProperty)) { SetVisibility(child, currentPermission); } } /// /// 寻找带有指定附加属性的控件 /// /// /// /// public static IEnumerable FindElementsWithAttachedProperty(UIElement parent, DependencyProperty attachedProperty) { if (parent is null) yield break; int count = VisualTreeHelper.GetChildrenCount(parent); for (int i = 0; i < count; i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is UIElement uIElement) { var value = uIElement.GetValue(attachedProperty); var metadata = attachedProperty.GetMetadata(uIElement.GetType()); if (!Equals(value, metadata.DefaultValue)) { yield return uIElement; } foreach (var descendant in FindElementsWithAttachedProperty(uIElement, attachedProperty)) { yield return descendant; } } } } }