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

@@ -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);