简单边框

许多简单的节点只是由一个的面板类型的面板,自动带有围绕TextBlock的Shape。

  1. diagram.nodeTemplate =
  2. $(go.Node, "Auto",
  3. $(go.Shape, "Rectangle",
  4. new go.Binding("fill", "color")),
  5. $(go.TextBlock,
  6. { margin: 5 },
  7. new go.Binding("text", "key"))
  8. );
  9. diagram.model.nodeDataArray = [
  10. { key: "Alpha", color: "lightblue" }
  11. ];

image.png

形状节点

内容周围的Shape不必为矩形。周围/背景对象不必是Shape。

  1. diagram.nodeTemplate =
  2. $(go.Node, "Auto",
  3. $(go.Shape,
  4. new go.Binding("figure", "fig"),
  5. new go.Binding("fill", "color")),
  6. $(go.TextBlock,
  7. { margin: 5 },
  8. new go.Binding("text", "key"))
  9. );
  10. diagram.model.nodeDataArray = [
  11. { key: "Alpha", color: "lightblue", fig: "RoundedRectangle" },
  12. { key: "Beta", color: "lightblue", fig: "Ellipse" },
  13. { key: "Gamma", color: "lightblue", fig: "Hexagon" },
  14. { key: "Delta", color: "lightblue", fig: "FramedRectangle" },
  15. { key: "Epsilon", color: "lightblue", fig: "Cloud" },
  16. { key: "Zeta", color: "lightblue", fig: "Procedure" }
  17. ];

image.png

复杂内容

自动面板的内容不必限于单个TextBlock-您可以具有任意复杂的对象面板。

  1. diagram.nodeTemplate =
  2. $(go.Node, "Auto",
  3. $(go.Shape,
  4. { fill: $(go.Brush, "Linear", { 0: "white", 1: "lightblue" }),
  5. stroke: "darkblue", strokeWidth: 2 }),
  6. $(go.Panel, "Table",
  7. { defaultAlignment: go.Spot.Left, margin: 4 },
  8. $(go.RowColumnDefinition, { column: 1, width: 4 }),
  9. $(go.TextBlock,
  10. { row: 0, column: 0, columnSpan: 3, alignment: go.Spot.Center },
  11. { font: "bold 12pt sans-serif" },
  12. new go.Binding("text", "key")),
  13. $(go.TextBlock, "First: ",
  14. { row: 1, column: 0 }),
  15. $(go.TextBlock,
  16. { row: 1, column: 2 },
  17. new go.Binding("text", "prop1")),
  18. $(go.TextBlock, "Second: ",
  19. { row: 2, column: 0 }),
  20. $(go.TextBlock,
  21. { row: 2, column: 2 },
  22. new go.Binding("text", "prop2"))
  23. )
  24. );
  25. diagram.model.nodeDataArray = [
  26. { key: "Alpha", prop1: "value of 'prop1'", prop2: "the other property" }
  27. ];

image.png

固定大小的节点

如果希望将Panel(因此Node,因为Node继承自Part,而Part继承自Panel)的大小固定,则在该Panel上设置GraphObject.desiredSize。(等效地,您可以设置GraphObject.width和GraphObject.height。)这可能会导致内容裁剪过大,或者如果内容小于“自动”提供的可用区域,则可能会导致多余的空间面板。

  1. diagram.nodeTemplate =
  2. $(go.Node, "Auto",
  3. { desiredSize: new go.Size(100, 50) }, // on Panel
  4. $(go.Shape,
  5. new go.Binding("figure", "fig"),
  6. new go.Binding("fill", "color")),
  7. $(go.TextBlock,
  8. { margin: 5 },
  9. new go.Binding("text", "key"))
  10. );
  11. diagram.model.nodeDataArray = [
  12. { key: "Alpha", color: "lightblue", fig: "RoundedRectangle" },
  13. { key: "Beta", color: "lightblue", fig: "Ellipse" },
  14. { key: "Gamma", color: "lightblue", fig: "Hexagon" },
  15. { key: "Delta", color: "lightblue", fig: "FramedRectangle" },
  16. { key: "Epsilon,Epsilon,Epsilon", color: "lightblue", fig: "Cloud" },
  17. { key: "Z", color: "lightblue", fig: "Procedure" }
  18. ];

image.png
文章来源:https://www.evget.com/article/2019/12/5/33809.html