对象预览器支持了值类型集合成员的简单预览

This commit is contained in:
fengjiayi
2024-09-24 22:39:43 +08:00
parent 8a502b77d4
commit 06f6d2f34b
28 changed files with 1674 additions and 859 deletions

View File

@@ -0,0 +1,71 @@
using Serein.NodeFlow.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls.Primitives;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows;
using Serein.Library.Enums;
namespace Serein.WorkBench.Themes
{
public class NodeTreeView : TreeView
{
public NodeTreeView()
{
this.ItemContainerGenerator.StatusChanged += OnStatusChanged;
}
private void OnStatusChanged(object sender, EventArgs e)
{
if (this.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
{
foreach (var item in Items)
{
var treeViewItem = (TreeViewItem)this.ItemContainerGenerator.ContainerFromItem(item);
if (treeViewItem != null)
{
treeViewItem.Expanded += TreeViewItem_Expanded;
ApplyColor(treeViewItem, item as NodeModelBase);
}
}
}
}
private void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
{
if (sender is TreeViewItem item && item.DataContext is NodeModelBase node)
{
if (item.Items.Count == 0) // 懒加载
{
foreach (var childNode in node.SuccessorNodes[ConnectionType.Upstream])
{
item.Items.Add(childNode);
}
}
}
}
private void ApplyColor(TreeViewItem item, NodeModelBase node)
{
// 根据 ControlType 设置颜色
switch (node.ControlType)
{
case NodeControlType.Flipflop:
item.Background = Brushes.LightGreen;
break;
case NodeControlType.Action:
item.Background = Brushes.LightCoral;
break;
// 添加更多条件
default:
item.Background = Brushes.Transparent;
break;
}
}
}
}