1. 重新设计了Generate项目及相关特性的命名,避免与其他类型混淆。

2. 补充了部分注释。
3. 修改了删除容器节点时,容器内子节点未正确删除的问题。
This commit is contained in:
fengjiayi
2025-07-30 21:15:07 +08:00
parent 93148b11a5
commit 152077e9b5
188 changed files with 2713 additions and 1406 deletions

View File

@@ -9,8 +9,14 @@ using System.Windows;
namespace Serein.Workbench.Themes
{
/// <summary>
/// BindableRichTextBox 是一个可绑定的 RichTextBox 控件,允许将 FlowDocument 对象绑定到其 Document 属性。
/// </summary>
public partial class BindableRichTextBox : RichTextBox
{
/// <summary>
/// BindableRichTextBox 的依赖属性,允许绑定 FlowDocument 对象到 RichTextBox 的 Document 属性。
/// </summary>
public new FlowDocument Document
{
get { return (FlowDocument)GetValue(DocumentProperty); }

View File

@@ -26,6 +26,9 @@ namespace Serein.Workbench.Themes
{
public Action<string,object> SelectObj { get; set; }
/// <summary>
/// IOC对象视图控件
/// </summary>
public IOCObjectViewControl()
{
InitializeComponent();
@@ -89,6 +92,9 @@ namespace Serein.Workbench.Themes
}
}
/// <summary>
/// 清空所有实例显示
/// </summary>
public void ClearObjItem()
{
DependenciesListBox.Dispatcher.Invoke(() =>
@@ -108,6 +114,10 @@ namespace Serein.Workbench.Themes
}
}
/// <summary>
/// 移除一个实例的显示
/// </summary>
/// <param name="key"></param>
public void RemoveDependenciesInstance(string key)
{
object? itemControl = null;

View File

@@ -19,8 +19,14 @@ namespace Serein.Workbench.Themes
/// </summary>
public partial class InputDialog : Window
{
/// <summary>
/// 输入对话框的输入值
/// </summary>
public string InputValue { get; private set; }
/// <summary>
/// 初始化输入对话框的新实例
/// </summary>
public InputDialog()
{
InitializeComponent();

View File

@@ -11,9 +11,19 @@ using System.Windows.Input;
namespace Serein.Workbench.Themes
{
/// <summary>
/// 描述或名称转换器
/// </summary>
public class DescriptionOrNameConverter : IMultiValueConverter
{
/// <summary>
/// 将源类型的数组转换为目标类型的值。
/// </summary>
/// <param name="values"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string description = values[0] as string;
@@ -21,15 +31,34 @@ namespace Serein.Workbench.Themes
return string.IsNullOrWhiteSpace(description) ? name : description;
}
/// <summary>
/// 将值从目标类型转换回源类型的数组。
/// </summary>
/// <param name="value"></param>
/// <param name="targetTypes"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
/// <summary>
/// 多条件转换器,根据参数类型和是否启用来决定返回的模板
/// </summary>
public class MultiConditionConverter : IMultiValueConverter
{
/// <summary>
/// 将源类型的数组转换为目标类型的值。
/// </summary>
/// <param name="values"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length == 2 && values[0] is Type valueType && values[1] is bool isEnabled)
@@ -51,30 +80,53 @@ namespace Serein.Workbench.Themes
return DependencyProperty.UnsetValue;
}
/// <summary>
/// 将值从目标类型转换回源类型的数组。
/// </summary>
/// <param name="value"></param>
/// <param name="targetTypes"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
/// <summary>
/// 数据上下文代理类用于绑定到DataContextProperty
/// </summary>
public class DataContextProxy : Freezable
{
/// <summary>
/// 数据上下文代理类构造函数
/// </summary>
public DataContextProxy()
{
BindingOperations.SetBinding(this, DataContextProperty, new Binding());
}
/// <summary>
/// 数据上下文属性
/// </summary>
public ParameterDetails DataContext
{
get { return (ParameterDetails)GetValue(DataContextProperty); }
set { SetValue(DataContextProperty, value); }
}
/// <summary>
/// 数据上下文依赖属性
/// </summary>
public static readonly DependencyProperty DataContextProperty = FrameworkElement
.DataContextProperty.AddOwner(typeof(DataContextProxy));
/// <summary>
/// 创建一个新的实例重写Freezable的CreateInstanceCore方法。
/// </summary>
/// <returns></returns>
protected override Freezable CreateInstanceCore()
{
return new DataContextProxy();
@@ -123,10 +175,15 @@ namespace Serein.Workbench.Themes
//var MethodDetails = (MethodDetails)args.NewValue;
//MethodDetails.ExplicitDatas[0].
}
/// <summary>
/// 添加参数命令
/// </summary>
public ICommand CommandAddParams { get; }
/// <summary>
/// 方法参数控件构造函数
/// </summary>
public MethodDetailsControl()
{
CommandAddParams = new RelayCommand(ExecuteAddParams);

View File

@@ -9,6 +9,9 @@ using static Serein.Workbench.Themes.TypeViewerWindow;
namespace Serein.Workbench.Themes
{
/// <summary>
/// FlowDataDetails 类用于存储对象的详细信息,包括名称、类型、数据类型、数据值和数据路径等。
/// </summary>
public class FlowDataDetails
{
/// <summary>
@@ -83,11 +86,12 @@ namespace Serein.Workbench.Themes
// 用于存储当前展开的节点路径
private HashSet<string> expandedNodePaths = new HashSet<string>();
/// <summary>
/// 加载对象信息,展示其成员
/// </summary>
/// <param name="key">与对象关联的Key,用于管理对象</param>
/// <param name="obj">要展示的对象</param>
public void LoadObjectInformation(string key, object obj)
{
@@ -113,7 +117,7 @@ namespace Serein.Workbench.Themes
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private async void UpMonitorExpressionButton_Click(object sender, RoutedEventArgs e)
private void UpMonitorExpressionButton_Click(object sender, RoutedEventArgs e)
{
//if (FlowEnvironment is not null && await FlowEnvironment.AddInterruptExpressionAsync(monitorKey, MonitorExpression)) // 对象预览器尝试添加中断表达式
//{
@@ -441,6 +445,7 @@ namespace Serein.Workbench.Themes
/// </summary>
/// <param name="obj"></param>
/// <param name="property"></param>
/// <param name="value"></param>
/// <returns></returns>
private string GetPropertyValue(object obj, PropertyInfo property,out object? value)
{
@@ -469,6 +474,7 @@ namespace Serein.Workbench.Themes
/// </summary>
/// <param name="obj"></param>
/// <param name="field"></param>
/// <param name="value"></param>
/// <returns></returns>
private string GetFieldValue(object obj, FieldInfo field, out object? value)
{
@@ -486,6 +492,7 @@ namespace Serein.Workbench.Themes
}
}
#if false
/// <summary>
@@ -651,3 +658,5 @@ namespace Serein.Workbench.Themes
//}
#endif

View File

@@ -157,7 +157,9 @@ namespace Serein.Workbench.Themes
/// <summary>
/// 设置子项节点的事件
/// </summary>
/// <param name="memberNode"></param>
/// <param name="member"></param>
/// <param name="contextMenu"></param>
/// <returns></returns>
private bool ConfigureTreeItemMenu(TreeViewItem memberNode, MemberInfo member,out ContextMenu? contextMenu)
{