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