From c67315990ba6b7204387b54cb88ac5ea550461b0 Mon Sep 17 00:00:00 2001 From: fengjiayi <12821976+ning_xi@user.noreply.gitee.com> Date: Tue, 24 Sep 2024 22:55:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E4=B8=AD=E6=95=B0=E7=BB=84=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E5=90=8E=E5=88=B7=E6=96=B0=E6=97=B6=E4=BC=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=8A=98=E5=8F=A0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WorkBench/Themes/ObjectViewerControl.xaml.cs | 61 ++++++++++++-------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/WorkBench/Themes/ObjectViewerControl.xaml.cs b/WorkBench/Themes/ObjectViewerControl.xaml.cs index a346e13..9060321 100644 --- a/WorkBench/Themes/ObjectViewerControl.xaml.cs +++ b/WorkBench/Themes/ObjectViewerControl.xaml.cs @@ -217,19 +217,18 @@ namespace Serein.WorkBench.Themes /// private void TreeViewItem_Expanded(object sender, RoutedEventArgs e) { - var item = (TreeViewItem)sender; - - - // 判断有没有加载过 - //if (item.Items.Count == 1 && item.Items[0] is TreeViewItem placeholder && placeholder.Header.ToString() == "Loading...") - if (item.Items.Count == 0) + if (sender is TreeViewItem item) { if (item.Tag is FlowDataDetails flowDataDetails) // FlowDataDetails flowDataDetails object obj { - // 记录当前节点的路径 - var path = flowDataDetails.DataPath; - expandedNodePaths.Add(path); - AddMembersToTreeNode(item, flowDataDetails.DataValue, flowDataDetails.DataType); + if (flowDataDetails.ItemType == TreeItemType.Item || item.Items.Count == 0) + { + // 记录当前节点的路径 + var path = flowDataDetails.DataPath; + expandedNodePaths.Add(path); + AddMembersToTreeNode(item, flowDataDetails.DataValue, flowDataDetails.DataType); + } + } } } @@ -241,9 +240,7 @@ namespace Serein.WorkBench.Themes /// private void TreeViewItem_Collapsed(object sender, RoutedEventArgs e) { - var item = (TreeViewItem)sender; - - if (item.Items.Count > 0) + if (sender is TreeViewItem item && item.Items.Count > 0) { if (item.Tag is FlowDataDetails flowDataDetails) { @@ -309,13 +306,14 @@ namespace Serein.WorkBench.Themes /// private TreeViewItem ConfigureTreeViewItem(object obj, MemberInfo member) { - TreeViewItem memberNode = new TreeViewItem { Header = member.Name }; + #region 属性 if (member is PropertyInfo property) { - + #region 集合类型 if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) && property.GetValue(obj) is IEnumerable collection && collection is not null) { + TreeViewItem memberNode = new TreeViewItem { Header = member.Name }; // 处理集合类型的属性 memberNode.Tag = new FlowDataDetails { @@ -328,7 +326,7 @@ namespace Serein.WorkBench.Themes int index = 0; foreach (var item in collection) { - var itemNode = new TreeViewItem { Header = $"[{index++}] {item}" ?? "null" }; + var itemNode = new TreeViewItem { Header = $"[{index++}] {item}" ?? "null" }; memberNode.Tag = new FlowDataDetails { ItemType = TreeItemType.Item, @@ -339,10 +337,18 @@ namespace Serein.WorkBench.Themes memberNode.Items.Add(itemNode); } memberNode.Header = $"{property.Name} : {property.PropertyType.Name} [{index}]"; + if (!property.PropertyType.IsPrimitive && property.PropertyType != typeof(string)) + { + memberNode.Expanded += TreeViewItem_Expanded; + memberNode.Collapsed += TreeViewItem_Collapsed; + } return memberNode; } + #endregion + #region 值类型与未判断的类型 else { + TreeViewItem memberNode = new TreeViewItem { Header = member.Name }; string propertyValue = GetPropertyValue(obj, property, out object value); memberNode.Tag = new FlowDataDetails { @@ -353,23 +359,24 @@ namespace Serein.WorkBench.Themes }; ; memberNode.Header = $"{property.Name} : {property.PropertyType.Name} = {propertyValue}"; - if (!property.PropertyType.IsPrimitive && property.PropertyType != typeof(string)) { memberNode.Expanded += TreeViewItem_Expanded; memberNode.Collapsed += TreeViewItem_Collapsed; } return memberNode; - } - + } + + #endregion } #endregion #region 字段 else if (member is FieldInfo field) { - + #region 集合类型 if (typeof(IEnumerable).IsAssignableFrom(field.FieldType) && field.GetValue(obj) is IEnumerable collection && collection is not null) { + TreeViewItem memberNode = new TreeViewItem { Header = member.Name }; // 处理集合类型的字段 memberNode.Tag = new FlowDataDetails { @@ -378,7 +385,7 @@ namespace Serein.WorkBench.Themes Name = field.Name, DataValue = collection, }; - + int index = 0; foreach (var item in collection) { @@ -394,11 +401,18 @@ namespace Serein.WorkBench.Themes memberNode.Items.Add(itemNode); } memberNode.Header = $"{field.Name} : {field.FieldType.Name} [{index}]"; + if (!field.FieldType.IsPrimitive && field.FieldType != typeof(string)) + { + memberNode.Expanded += TreeViewItem_Expanded; + memberNode.Collapsed += TreeViewItem_Collapsed; + } return memberNode; } + #endregion + #region 值类型与未判断的类型 else { - + TreeViewItem memberNode = new TreeViewItem { Header = member.Name }; string fieldValue = GetFieldValue(obj, field, out object value); memberNode.Tag = new FlowDataDetails @@ -417,7 +431,8 @@ namespace Serein.WorkBench.Themes memberNode.Collapsed += TreeViewItem_Collapsed; } return memberNode; - } + } + #endregion } #endregion #region 返回null