Syncfusion WPF 컨트롤을 사용하고 있습니다. 방사형 트리 다이어그램을 표시하는 프로젝트를 만들었습니다.선택한 노드의 기본 콘텐츠 얻기
그림의 맨 아래에있는 Content (Link, LinkID, ParentID 등)에 나열된 기본 값에 액세스하려고합니다.
사진 : 나는 node.Content.GetType().ToString()
을 실행하면
NodeSelected
이벤트를 보면, 난 액세스하려는 속성이 포함되어 내 기본 클래스 모델을 얻을.
그래서 노드를 선택하는 방법, 노드의 데이터 인 기본 클래스의 속성을 가져 오는 방법을 잘 모르겠습니다.
모든 것이 의미가 있기를 바랍니다. 나는 스스로 가르칩니다.
가 여기 내 MainWindow를 코드입니다 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using Syncfusion;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Syncfusion.UI.Xaml.Diagram.Layout;
using Syncfusion.UI.Xaml.Diagram;
using System.Collections.ObjectModel;
using Link_Map.Classes;
using Syncfusion.SfSkinManager;
using Syncfusion.Windows.Shared;
using Syncfusion.Windows.Tools.Controls;
using Syncfusion.UI.Xaml.Diagram.Controls;
namespace Link_Map
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : RibbonWindow
{
Controller controller = new Controller();
DirectedTreeLayout tree = new DirectedTreeLayout();
ObservableCollection<Node> nodes = new ObservableCollection<Node>();
ObservableCollection<Connector> connects = new ObservableCollection<Connector>();
public MainWindow()
{
InitializeComponent();
InitDiagram();
controller.AddRoot();
Link_Grid.ItemsSource = controller.viewmodel.Links;
SkinStorage.SetVisualStyle(this, "Blend");
//nodes.ElementAt(0).IsSelected = true;
}
private void InitDiagram()
{
controller.Init();
lmWindow.Nodes = nodes;
lmWindow.Connectors = connects;
DataSourceSettings settings = new DataSourceSettings();
settings.DataSource = controller.viewmodel.Links;
settings.ParentId = "ParentID";
settings.Id = "LinkID";
settings.Root = "0";
lmWindow.DataSourceSettings = settings;
settings.DataSource = controller.viewmodel.Links;
(lmWindow.Info as IGraphInfo).ItemAdded += MainWindow_ItemAdded;
(lmWindow.Info as IGraphInfo).ItemSelectedEvent += NodeSelected;
lmWindow.LayoutManager = new LayoutManager()
{
Layout = new RadialTreeLayout()
};
(lmWindow.LayoutManager.Layout as RadialTreeLayout).HorizontalSpacing = 10;
(lmWindow.LayoutManager.Layout as RadialTreeLayout).VerticalSpacing = 35;
//lmWindow.Tool = Tool.SingleSelect;
//lmWindow.Tool = Tool.ZoomPan;
lmWindow.Menu = null;
lmWindow.ScrollSettings.ScrollLimit = ScrollLimit.Diagram;
lmWindow.DefaultConnectorType = ConnectorType.Line;
lmWindow.PageSettings.PageBorderBrush = new SolidColorBrush(Colors.Transparent);
SelectorViewModel svm = (lmWindow.SelectedItems as SelectorViewModel);
svm.SelectorConstraints = svm.SelectorConstraints & ~(SelectorConstraints.QuickCommands|SelectorConstraints.Resizer);
//lmWindow.Constraints = SelectorConstraints.QuickCommands;
//lmWindow.Constraints = lmWindow.Constraints & ~(GraphConstraints.Draggable | GraphConstraints.Selectable);
}
public void NodeSelected(object sender, DiagramEventArgs e)
{
Node node = (e.Item as Node);
string ders = node.Content.GetType().ToString();
Console.WriteLine(ders);
}
private void Metro_Theme_Click(object sender, RoutedEventArgs e)
{
SkinStorage.SetVisualStyle(this, "Metro");
}
private void Blend_Theme_Click(object sender, RoutedEventArgs e)
{
SkinStorage.SetVisualStyle(this, "Blend");
}
private void Add_Click(object sender, RoutedEventArgs e)
{
for(int i=0; i<10; i++)
{
controller.AddLink();
}
lmWindow.LayoutManager.Layout.UpdateLayout();
}
//https://www.syncfusion.com/forums/127392/how-to-fire-event-on-sfdiagram-node-selection
//Apply Node and Connector Style
private void MainWindow_ItemAdded(object sender, ItemAddedEventArgs args)
{
if (args.Item is INode)
{
(args.Item as INode).UnitWidth = 10;
(args.Item as INode).UnitHeight = 10;
(args.Item as INode).ContentTemplate = this.lmWindow.Resources["contentTemplate"] as DataTemplate;
}
else if (args.Item is IConnector)
{
SolidColorBrush solid = new SolidColorBrush();
solid.Color = Color.FromArgb(255, 186, 186, 186);
(args.Item as IConnector).TargetDecoratorStyle = this.Resources["style"] as Style;
}
}
private void Link_Grid_GridPasteContent(object sender, Syncfusion.UI.Xaml.Grid.GridCopyPasteEventArgs e)
{
}
}
}
감사합니다.이 솔루션은 내 것보다 깨끗합니다. 이런 것들은 Syncfusion 문서에 있어야합니다. – Cnote