如何:编辑和自定义关系图文档

在 Visual Studio 旗舰版中,您可以通过编辑节点和链接来重点关注定向关系图编辑的关键关系和区域。 这在关系图显示有大量信息时尤其有用。 例如,您可以标识现有软件系统中的主要组件以及这些组件之间的关系。 然后,您可以与团队成员共享和讨论这些重点区域。 有关从代码生成关系图的信息,请参见如何:生成 .NET 代码的依赖项关系图

若要突出显示感兴趣的区域,您可以选择和筛选节点、将预定义的样式应用于节点和链接,以及将节点组织为组。 可以通过编辑关系图的有向图形标记语言 (DGML) 文件来更进一步地自定义关系图。 例如,您可以编辑该文件中的 DGML 元素以指定自定义样式、为节点和链接分配属性和类别,或将节点链接到文档、URL 和其他 .dgml 文件等项。 有关 DGML 元素的更多信息,请参见了解定向关系图标记语言 (DGML)。

提示

Visual Studio 将在您保存 .dgml 文件时删除任何未使用的 DGML 元素和特性,从而清理这些内容。 它也会在您手动添加新链接时自动创建节点元素。当保存 .dgml 文件时,已添加到元素的任何特性可能会按字母顺序自行重新排列。

可通过以下方式来编辑关系图:

  • 选择节点

  • 隐藏或显示节点

  • 显示或隐藏链接

  • 更改关系图的样式

  • 更改节点和链接的样式

  • 将样式从一个关系图复制到另一个关系图

  • 将节点组织为组

  • 为节点和链接分配属性

  • 为节点和链接分配类别

  • 将项链接到节点

  • 创建常用路径的别名

选择节点

若要

执行这些步骤

从特定类别中选择节点

  1. 右击图形,然后单击“显示高级选择”

  2. “所选内容”框中的“类别”下,单击所需的类别。

若要创建和分配自定义类别,请参见为节点和链接分配类别。

选择具有特定属性或属性值的节点

  1. 右击图形,然后单击“显示高级选择”

  2. “所选内容”框中的“属性”下,单击所需的属性。 若要选择特定属性值,请展开属性。

向所选节点中添加相关节点

右击所选节点,指向“所选内容”,然后选择以下各项之一:

  • 若要添加直接链接到所选节点的节点,请单击“选择传入”

  • 若要添加从所选节点直接链接的节点,请单击“选择传出”

  • 若要添加直接链接到和直接链接自所选节点的节点,请单击“选择二者”

  • 若要添加链接到所选节点以及从所选节点链接的所有节点,请单击“选择所有已连接节点”

  • 若要添加所选节点的所有子级,请单击“选择子级”

选择所有未选定节点

右击所选节点,指向“所选内容”,然后单击“反转”

隐藏或显示节点

隐藏关系图上的节点可阻止它们在关系图上显示和参与任何布局算法。

若要

执行这些步骤

隐藏所选节点

  1. 选择要隐藏的节点。

  2. 右击所选节点或关系图,指向“所选内容”,然后单击“隐藏”

隐藏具有特定类别或属性的节点

  1. 若要显示“所选内容”框,请右击关系图图面,然后单击“显示高级选择”

  2. “所选内容”框中,单击所需的类别或属性。

  3. 右击关系图图面,指向“所选内容”,然后单击“隐藏”

隐藏未选定节点

  1. 选择不希望隐藏的节点。

  2. 右击所选节点或关系图,指向“所选内容”,然后单击“隐藏未选内容”

显示所有隐藏的节点

右击关系图,指向“所选内容”,然后单击“全部取消隐藏”

通过编辑 .dgml 文件来隐藏节点

  1. 右击关系图图面,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件。

  2. 在 <Node/> 元素中,添加下面的特性以隐藏节点:

    Visibility="Hidden"
    

    例如:

    <Nodes>
       <Node Id="MyNode" Visibility="Hidden"/>
    </Nodes>
    

显示或隐藏链接

可通过指定希望看到的链接的种类来控制关系图上的详细信息量。 关系图显示两种链接:节点之间的直接链接,以及默认情况下隐藏的跨组链接。 跨组链接都是跨不同的组连接节点的单独链接。

如果组处于折叠状态,则关系图会将所有跨组链接聚合为组之间的单个链接。 如果组处于展开状态,您可以在组内选择节点,并且新的跨组链接将出现,并显示该组内的实际依赖关系。

显示或隐藏链接

  1. 如果图形工具栏不可见,请在**“视图”上,指向“工具栏”,然后单击“定向关系图”**。

  2. 从下表中选择一个任务:

    若要

    单击

    始终显示所有跨组链接

    显示所有跨组链接

    仅显示连接到所选节点的跨组链接

    显示所选节点的跨组链接

    始终隐藏所有跨组链接

    隐藏所有跨组链接

    隐藏所有链接(或显示所有链接)

    隐藏所有链接

    若要显示所有链接,请再次单击“隐藏所有链接”以禁用此模式。

更改关系图的样式

可通过编辑关系图的 .dgml 文件来更改关系图的背景色和边框颜色。 若要更改节点和链接的样式,请参见更改节点和链接的样式。

更改关系图的样式

  1. 右击关系图图面,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件。

  2. 在 <DirectedGraph> 元素中,添加以下任何特性以更改其样式:

    若要更改

    添加以下特性

    背景色

    Background="ColorNameOrHexadecimalValue"

    边框颜色

    Stroke="StrokeValue"

    例如:

    <DirectedGraph Background="Green" xmlns="https://schemas.microsoft.com/vs/2009/dgml" >
       ...
       ...
    </DirectedGraph>
    

更改节点和链接的样式

您可以更改节点上的图标以及节点和链接的颜色。 可以使用预定义的颜色和图标,也可以通过编辑关系图的 .dgml 文件来指定自定义颜色和图标。 有关更多信息,请参见将自定义样式应用于节点和链接。

例如,您可以选择一种颜色来突出显示具有特定类别或属性的节点和链接。 这样,您将可标识和重点显示关系图的特定区域。

将预定义的颜色或图标应用于具有特定类别或属性的节点

  1. 如果看不到**“图例”框,请右击关系图,然后单击“显示图例”**。

  2. 在**“图例”**框中,确定节点类别或属性是否显示在列表中。

  3. 如果列表未包括类别或属性,请单击**“添加”,指向“节点类别”“节点属性”**,然后选择类别或属性。

    提示

    若要为节点创建和分配类别,请参见为节点和链接分配类别。 若要为节点创建和分配属性,请参见为节点和链接分配属性。

  4. 在**“图例”**框中,单击类别或属性旁边的下拉列表。

  5. 使用下表来选择要更改的样式:

    若要更改

    Select

    背景色

    背景

    轮廓颜色

    笔画

    文本颜色

    Foreground

    图标

    图标

  6. 在选取器对话框中,选择以下选项之一:

    若要应用

    请执行这些步骤

    颜色集(或图标集)

    单击“选择颜色集”“选择图标集”)下拉列表,然后单击颜色集(或图标集)。

    若要恢复为默认颜色(或图标),请在“选择颜色集”“选择图标集”)下拉列表中单击“无”

    特定颜色(或图标)

    单击类别或属性值下拉列表,然后选择颜色(或图标)。

  7. 完成上述操作后,单击**“确定”**。

    提示

    您可以重新排列、删除或暂时禁用“图例”框中的样式。 有关更多信息,请参见修改“图例”框。

将预定义的颜色应用于具有特定类别或属性的链接

  1. 如果看不到**“图例”框,请右击关系图,然后单击“显示图例”**。

  2. 在**“图例”**框中,确定类别或属性是否显示在列表中。

  3. 如果列表未包括类别或属性,请单击**“添加”,指向“链接类别”“链接属性”**,然后选择类别或属性。

    提示

    若要为链接创建和分配类别,请参见为节点和链接分配类别。 若要为链接创建和分配属性,请参见为节点和链接分配属性。

  4. 在**“图例”**框中,单击类别或属性旁边的下拉列表。

  5. 使用下表来选择要更改的样式:

    若要更改

    Select

    箭头颜色

    背景

    轮廓颜色

    笔画

  6. 在**“颜色集选取器”**框中,选择以下各项之一:

    若要应用

    请执行这些步骤

    颜色集

    单击“选择颜色集”下拉列表,然后单击颜色集。

    若要恢复为默认颜色,请在“选择颜色集”下拉列表中单击“无”

    特定颜色

    单击类型或属性值下拉列表以选择颜色。

  7. 完成上述操作后,单击**“确定”**。

    提示

    您可以重新排列、删除或暂时禁用“图例”框中的样式。 有关更多信息,请参见修改“图例”框。

将自定义样式应用于节点和链接

您可以将自定义样式应用于以下各项:

  • 单个节点和链接

  • 节点和链接组

  • 基于特定条件的节点和链接组

将自定义样式应用于单个节点

  1. 右击要自定义其样式的节点,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件,并突出显示该节点的 <Node/> 元素。

  2. 在 <Node/> 元素中,添加以下任何特性以自定义其样式:

    若要更改

    添加以下特性

    背景色

    Background="ColorNameOrHexadecimalValue"

    轮廓

    Stroke="ColorNameOrHexadecimalValue"

    轮廓粗细

    StrokeThickness="StrokeValue"

    文本颜色

    Foreground="ColorNameOrHexadecimalValue"

    图标

    Icon="IconFilePathLocation"

    文本大小

    FontSize="FontSizeValue"

    文本类型

    FontFamily="FontFamilyName"

    文本粗细

    FontWeight="FontWeightValue"

    文本样式

    FontStyle="FontStyleName"

    例如,可以指定 Italic 作为文本样式。

    纹理

    Style="Glass"

    - 或 -

    Style="Plain"

    形状

    Shape

    例如:

    <Nodes>
       <Node Id="MyNode" Background="Green" Stroke="#FF000000"
       Foreground="White" Icon="...\Graph Icons\MyNodeIcon.jpg"/>
    </Nodes>
    

将自定义样式应用于单个链接

  1. 在该图形上,将鼠标指针移到相应的链接上,以显示工具提示并确定链接的源节点和目标节点。

  2. 右击图形,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件。

  3. 找到包含源节点名称和目标节点名称的 <Link/> 元素。

  4. 在 <Link/> 元素中,添加以下任何特性以自定义其样式:

    若要更改

    添加以下特性

    箭头颜色

    Background="ColorNameOrHexadecimalValue"

    轮廓颜色

    Stroke="ColorNameOrHexadecimalValue"

    轮廓粗细

    StrokeThickness="StrokeValue"

    轮廓样式

    StrokeDashArray="StrokeArrayValues"

    例如:

    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" Background="Green" Stroke="#FF000000" />
    </Links>
    

将自定义样式应用于节点或链接组

  1. 为节点或链接分配所需的任何类别或属性。

    有关更多信息,请参见为节点和链接分配类别和为节点和链接分配属性。

  2. 右击关系图图面,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件。

  3. 如果 <Styles></Styles> 元素不存在,请在 <DirectedGraph></DirectedGraph> 元素下的 <Links></Links> 元素后面添加一个该元素。

  4. 在 <Styles></Styles> 元素中的 <Style/> 元素下,指定以下特性:

    • TargetType="Node | Link | Graph"

    • GroupLabel="NameInLegendBox"

    • ValueLabel="NameInStylePickerBox"

    若要将自定义样式应用于所有目标类型,请不要使用条件。

将条件样式应用于节点或链接组

  1. 在 <Style/> 元素中,添加一个包含 Expression 特性的 <Condition/> 元素,以指定返回布尔值的表达式。

    例如:

    <Condition Expression="MyCategory"/>
    

    - 或 -

    <Condition Expression="MyCategory > 100"/>
    

    - 或 -

    <Condition Expression="HasCategory('MyCategory')"/>
    

    此表达式使用以下 Backus-Naur 形式 (BNF) 语法:

    <Expression> ::= <BinaryExpression> | <UnaryExpression> | "("<Expression>")" | <MemberBindings> | <Literal> | <Number>

    <BinaryExpression> ::= <Expression> <Operator> <Expression>

    <UnaryExpression> ::= "!"<Expression> | "+" <Expression> | "-" <Expression>

    <Operator> ::= "<" | "<=" | "=" | ">=" | ">" | "!=" | "or" | "and" | "+" | "*" | "/" | "-"

    <MemberBindings> ::= <MemberBindings> | <MemberBinding> "."<MemberBinding>

    <MemberBinding> ::= <MethodCall> | <PropertyGet>

    <MethodCall> ::= <Identifier> "(" <MethodArgs> ")"

    <PropertyGet> ::= Identifier

    <MethodArgs> ::= <Expression> | <Expression> "," <MethodArgs> | <empty>

    <Identifier> ::= [^. ]*

    <Literal> ::= 带单引号或双引号的字符串文本

    <Number> ::= 带可选小数点的数字字符串

    您可以指定多个 <Condition/> 元素,这些元素必须均为 true 才能应用样式。

  2. 在 <Condition/> 元素后的下一行上,添加一个或多个 <Setter/> 元素,以指定要应用于满足条件的关系图、节点或链接的 Property 特性和固定 Value 特性或者计算所得的 Expression 特性。

    例如:

    <Setter Property="BackGround" Value="Green"/>
    

作为一个完整的简单示例,以下条件根据节点的 Passed 类别是设置为 True 还是 False 来指定该节点显示为绿色或红色。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      <Node Id="MyFirstNode" Passed="True" />
      <Node Id="MySecondNode" Passed="False" />
   </Nodes>
   <Links>
   </Links>
   <Styles>
      <Style TargetType="Node" GroupLabel="Passed" ValueLabel="True">
         <Condition Expression="Passed='True'"/>
         <Setter Property="Background" Value="Green"/>
      </Style>
      <Style TargetType="Node" GroupLabel="Passed" ValueLabel="False">
         <Condition Expression="Passed='False'"/>
         <Setter Property="Background" Value="Red"/>
      </Style>
   </Styles>
</DirectedGraph>

下表包括一些您可以使用的示例条件:

若要

示例 DGML

根据代码的行数来设置字号,这样也会更改节点的大小。 此示例使用单个条件表达式来设置多个属性:FontSize 和 FontFamily。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="https://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
   <Node Id="Class1" LinesOfCode ="200" />
   <Node Id="Class2" LinesOfCode ="1000" />
   <Node Id="Class3" LinesOfCode ="20" />
</Nodes>
<Properties>
   <Property Id="LinesOfCode" Label="LinesOfCode" Description="LinesOfCode" DataType="System.Int32" />
</Properties>
<Styles>
   <Style TargetType="Node" GroupLabel="LinesOfCode" ValueLabel="Function">
      <Condition Expression="LinesOfCode &gt; 0" />
      <Setter Property="FontSize" Expression="Math.Max(9,Math.Sqrt(LinesOfCode))" />
      <Setter Property="FontFamily" Value="Papyrus" />
   </Style>
</Styles>
</DirectedGraph>

基于 Coverage 属性设置节点的背景色。 类似于 if-else 语句,将按样式的出现顺序来计算样式。

在此示例中:

  1. 如果 Coverage 大于 80,则将 Background 属性设置为绿色。

  2. 如果 Coverage 大于 50,则基于 Coverage 属性的值将 Background 属性设置为橙色阴影。

  3. 否则基于 Coverage 属性的值将 Background 属性设置为红色阴影。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph xmlns="https://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
   <Node Id="Class1" Coverage="58" />
   <Node Id="Class2" Coverage="95" />
   <Node Id="Class3" Coverage="32" />
</Nodes>
<Properties>
   <Property Id="Coverage" Label="Coverage" Description="Code coverage as a percentage of blocks" DataType="Double" />
</Properties>
<Styles>
   <Style TargetType="Node" GroupLabel="Coverage" ValueLabel="Good">
      <Condition Expression="Coverage &gt; 80" />
      <Setter Property="Background" Value="Green" />
   </Style>
   <Style TargetType="Node" GroupLabel="Coverage" ValueLabel="OK">
      <Condition Expression="Coverage &gt; 50" />
      <Setter Property="Background" Expression="Color.FromRgb(180 * Math.Max(1, (80 - Coverage) / 30), 180, 0)" />
   </Style>
   <Style TargetType="Node" GroupLabel="Coverage" ValueLabel="Bad">
      <Setter Property="Background" Expression="Color.FromRgb(180, 180 * Coverage / 50, 0)" />
   </Style>
</Styles>
</DirectedGraph>

将 Shape 属性设置为 None 以使图标替换形状。 使用 Icon 属性指定图标的位置。

<DirectedGraph xmlns="https://schemas.microsoft.com/vs/2009/dgml">
<Nodes>
   <Node Id="Automation" Category="Test" Label="Automation" />
   <Node Id="C# Provider" Category="Provider" Label="C# Provider" />
</Nodes>
<Categories>
   <Category Id="Provider" Icon="..\Icons\AddIn.png" Shape="None" />
   <Category Id="Test" Icon="..\Icons\Macro.png" Shape="None" />
</Categories>
<Properties>
   <Property Id="Icon" DataType="System.String" />
   <Property Id="Label" Label="Label" Description="Displayable label of an Annotatable object" DataType="System.String" />
   <Property Id="Shape" DataType="System.String" />
</Properties>
<Styles>
   <Style TargetType="Node" GroupLabel="Group" ValueLabel="Has category">
      <Condition Expression="HasCategory('Group')" />
      <Setter Property="Background" Value="#80008080" />
   </Style>
   <Style TargetType="Node">
      <Setter Property="HorizontalAlignment" Value="Center" />
   </Style>
</Styles>
</DirectedGraph>

修改“图例”框

您可以重新排列、删除或暂时禁用**“图例”**框中的样式:

  1. 右击**“图例”**框中的一种样式。

  2. 执行以下任务之一:

    若要

    单击

    将样式上移

    上移

    将项下移

    下移

    删除项

    删除

    禁用项

    禁用

    重新激活项

    启用

将样式从一个关系图复制到另一个关系图

  • 右击源关系图的空白区域,单击**“复制图例”**,然后将样式粘贴到目标关系图上。

将节点组织为组

若要

执行这些步骤

显示具有组或链接形式的包容关系的节点

若要将链接显示为组,请选择容器节点,右击所选内容,指向“组”,然后单击“显示为组”

若要将组显示为链接,请选择容器节点,右击所选内容,指向“组”,然后单击“显示为链接”

若要将所有组显示为链接,请右击关系图,指向“组”,然后单击“全部显示为链接”

若要将所有链接显示为组,请右击关系图,指向“组”,然后单击“全部显示为组”

围绕所选节点添加新组

  1. 右击所选内容,指向“组”,然后单击“添加父组”

  2. 右击新组,然后单击“属性”

  3. “标签”属性中重命名该组。

围绕具有特定类别或属性的节点添加新组

  1. 若要显示“所选内容”框,请右击关系图图面,然后单击“显示高级选择”

  2. “所选内容”框中,单击所需的类别或属性。

  3. 右击关系图图面,指向“组”,然后单击“添加父组”

  4. 右击新组,然后单击“属性”

  5. “标签”属性中重命名该组。

依据节点的容器对节点进行分组

  1. “体系结构”菜单上,指向“窗口”,然后单击“体系结构资源管理器”

  2. 使用体系结构资源管理器来查找和选择要分组的所有节点。

    有关更多信息,请参见如何:使用体系结构资源管理器查找代码

  3. 在当前列的右侧,单击折叠的操作列将其展开。

    注意注意
    将指针移到“操作”列上时,该列会突出显示。
  4. 在操作列中,单击“包含者”

  5. 从下一列中将容器组拖到关系图。

  6. 右击关系图图面,指向“组”,然后单击“全部显示为组”

依据节点的属性值对节点进行分组

  1. 将关系图另存为磁盘上的 .dgml 文件。

  2. “体系结构”菜单上,指向“窗口”,然后单击“体系结构资源管理器”

  3. “体系结构资源管理器”中的“文件系统”下,单击“选择文件”

  4. 在下一列中,单击保存的 .dgml 文件

  5. 使用体系结构资源管理器来查找和选择要分组的所有节点。

    有关更多信息,请参见如何:使用体系结构资源管理器查找代码

  6. 在当前列的右侧,单击折叠的操作列将其展开。

    注意注意
    将指针移到“操作”列上时,该列会突出显示。
  7. 在“操作”列中的“分组”下,单击“按属性分组”

  8. 在下一列中,选择要用作组的属性。

    下一列将出现,并显示可用的属性值。

  9. 从下一列中将属性值组拖到关系图。

  10. 右击关系图图面,指向“组”,然后单击“全部显示为组”

移除组

选择要移除的一个或多个组,右击所选内容,指向“组”,然后单击“移除组”

从节点的父组开始移除节点,直至其祖父组,或者,如果节点没有祖父组,则移除组外部的节点

选择要移动的节点,右击所选内容,指向“组”,然后单击“从父级中移除”

也可以通过编辑关系图的 .dgml 文件来将节点组织为组。

使用现有节点作为组或添加新组

  1. 若要使用现有节点作为组,请右击要用作组节点的节点,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件,并突出显示该节点的 <Node/> 元素。

    - 或 -

    1. 若要添加新组,请右击关系图的空白区域,然后单击**“查看 DGML”**。

    2. 在 <Nodes> 部分添加新的 <Node/> 元素。

  2. 在 <Node/> 元素中,添加一个 Group 特性以指定组显示为展开状态还是折叠状态。 例如:

    <Nodes>
       <Node Id="MyFirstGroup" Group="Expanded" />
       <Node Id="MySecondGroup" Group="Collapsed" />
    </Nodes>
    
  3. 在 <Links> 部分,确保对于组节点和其子节点之间的每个关系,都存在具有以下特性的 <Link/> 元素:

    • 一个指定组节点的 Source 特性

    • 一个指定子节点的 Target 特性

    • 一个指定组节点和其子节点之间的 Contains 关系的 Category 特性

    例如:

    <Links>
       <Link Category="Contains" Source="MyFirstNewGroup" Target="FirstGroupChildOne" />
       <Link Category ="Contains" Source="MyFirstNewGroup" Target="FirstGroupChildTwo" />
       <Link Category ="Contains" Source="MySecondNewGroup" Target="SecondGroupChildOne" />
       <Link Category="Contains" Source="MySecondNewGroup" Target="SecondGroupChildTwo" />
    </Links>
    

    有关 Category 特性的更多信息,请参见为节点和链接分配类别。

为节点和链接分配属性

可以通过为节点和链接分配属性来组织节点和链接。 例如,可以选择具有特定属性的节点,以便能够对这些节点进行分组、更改它们的样式或隐藏它们。

为节点分配属性

  1. 右击节点,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件,并突出显示该节点的 <Node/> 元素。

  2. 在 <Node/> 元素中,指定属性的名称和属性的值。 例如:

    <Nodes>
       <Node Id="MyNode" MyPropertyName="PropertyValue" />
    </Nodes>
    
  3. 将 <Property/> 元素添加到 <Properties> 部分以指定特性,例如其可见名称和数据类型:

    <Properties>
       <Property Id="MyPropertyName" Label="My Property" DataType="System.DataType"/>
    </Properties>
    

为链接分配属性

  1. 在该图形上,将鼠标指针移到相应的链接上,以显示工具提示并确定链接的源节点和目标节点。

  2. 右击图形,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件。

  3. 找到包含源节点名称和目标节点名称的 <Link/> 元素。

  4. 在 <Node/> 元素中,指定属性的名称和属性的值。 例如:

    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" MyPropertyName="PropertyValue" />
    </Links>
    
  5. 将 <Property/> 元素添加到 <Properties> 部分以指定特性,例如其可见名称和数据类型:

    <Properties>
       <Property Id="MyPropertyName" Label="My Property Name" DataType="System.DataType"/>
    </Properties>
    

为节点和链接分配类别

可以通过为节点分配类别来组织节点。 例如,可以选择位于某些类别中的节点,以便能够对这些节点进行分组、更改它们的样式或隐藏它们。 可以突出显示具有某些类别的链接。 有关更多信息,请参见下列章节:

  • 将节点组织为组

  • 更改节点和链接的样式

  • 隐藏或显示节点

为节点分配类别

  • 若要分配预定义的类别(例如**“类别 1”),请右击节点,指向“分类”**,然后单击一个预定义的类别。

- 或 -

  • 创建和分配自定义类别:

    • 单击要分类的节点,按 F4 打开**“属性”窗口,在节点的“新建类别”**属性中键入类别的名称,然后按 Enter

    - 或 -

    1. 右击节点,然后单击**“查看 DGML”**。

      Visual Studio 将打开关系图的 .dgml 文件,并突出显示该节点的 <Node/> 元素。

    2. 在 <Node/> 元素中,添加一个 Category 特性以指定类别的名称。 例如:

      <Nodes>
         <Node Id="MyNode" Category="MyCategory" />
      </Nodes>
      
    3. 向 <Categories> 部分添加一个 <Category/> 元素,以便能够使用 Label 特性来指定该类别的显示文本:

      <Categories>
         <Category Id="MyCategory" Label="My Category" />
      </Categories>
      

为链接分配类别

  1. 在该图形上,将鼠标指针移到相应的链接上,以显示工具提示并确定链接的源节点和目标节点。

  2. 右击图形,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件。

  3. 找到包含源节点名称和目标节点名称的 <Link/> 元素。

  4. 在 <Link/> 元素中,添加一个 Category 特性以指定类别的名称。 例如:

    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" Category="MyCategory"
    </Links>
    
  5. 向 <Categories> 部分添加一个 <Category/> 元素,以便能够使用 Label 特性来指定该类别的显示文本:

    <Categories>
       <Category Id="MyCategory" Label="My Category" />
    </Categories>
    

可以创建分层类别,来帮助您组织节点并通过使用继承向子类别中添加特性。

创建分层类别

  • 为父类别添加一个 <Category/> 元素,然后将 BasedOn 特性添加到子类别的 <Category/> 元素。

    例如:

    <Nodes>
       <Node Id="MyFirstNode" Label="My First Node" Category= "MyCategory" />
       <Node Id="MySecondNode" Label="My Second Node" />
    </Nodes>
    <Links>
       <Link Source="MyFirstNode" Target="MySecondNode" />
    </Links>
    <Categories>
       <Category Id="MyCategory" Label="My Category" BasedOn="MyParentCategory"/>
       <Category Id="MyParentCategory" Label="My Parent Category" Background="Green"/>
    </Categories>
    

    在此示例中,MyFirstNode 的背景为绿色,因为它的 Category 特性继承 MyParentCategory 的 Background 特性。

将项链接到节点

通过编辑关系图的 .dgml 文件并将 Reference 特性添加到某个节点的 <Node/> 元素,可以将文档或 URL 等项链接到该节点。 Reference 特性指定该内容的路径。 此路径可能是相对于 .dgml 文件位置的路径,也可能是绝对路径。 然后,您可以从关系图上的该节点中打开和查看该内容。

提示

引用的一个或多个项必须存在您才能查看它们

例如,您可能希望链接以下项:

  • 若要描述某个类的更改,您可以将工作项、文档或另一个 .dgml 文件的 URL 链接到该类的节点。

  • 您可以将层关系图链接到表示软件逻辑体系结构中的层的组节点。

  • 若要显示有关公开某接口的组件的更多信息,您可以将组件图链接到该接口的节点。

  • 将节点链接到 Team Foundation Server 工作项或 Bug,或链接到与节点相关的某些其他信息。

将项链接到节点

  1. 在关系图上,右击节点,然后单击**“查看 DGML”**。

    Visual Studio 将打开关系图的 .dgml 文件,并突出显示该节点的 <Node/> 元素。

  2. 执行下表中的任务之一:

    若要链接

    请执行这些步骤

    单一项

    • 在 <Node/> 元素中,添加一个 Reference 特性以指定项的位置。

      注意注意
      每个 <Node/> 元素只能有一个 Reference 特性。

    例如:

    <Nodes>
       <Node Id="MyNode" Reference="MyDocument.txt" />
    </Nodes>
    <Properties>
       <Property Id="Reference" Label="My Document" DataType="System.String" IsReference="True" />
    </Properties>

    多个项

    1. 在 <Node/> 元素中,添加一个新特性以指定每个引用的位置。

    2. 在 <Properties> 部分:

      1. 为每个新引用类型添加一个 <Property/> 元素。

      2. 将 Id 特性设置为新引用特性的名称。

      3. 添加 IsReference 特性,并将其设置为 True 以使引用出现在节点的“转到”快捷菜单上。

      4. 使用 Label 特性指定节点的“转到”快捷菜单上的显示文本。

    例如:

    <Nodes>
       <Node Id="MyNode" SequenceDiagram="MySequenceDiagram.sequencediagram" ActiveBugs="MyActiveBugs.wiq"/>
    </Nodes>
    <Properties>
       <Property Id="SequenceDiagram" Label="My Sequence Diagram" DataType="System.String" IsReference="True" />
       <Property Id="ActiveBugs" Label="Active Bugs" DataType="System.String" IsReference="True" />
    </Properties>

    在关系图上,显示的节点名称带有下划线。

  3. 使用 ReferenceTemplate 特性来指定多个引用使用的公共字符串(例如 URL),而不是在引用中重复该字符串。

    ReferenceTemplate 特性为引用的值指定占位符。 在下面的示例中,ReferenceTemplate 特性中的 {0} 占位符将替换为 <Node/> 元素中的 MyFirstReference 和 MySecondReference 特性的值,以生成完整路径:

    <Nodes>
       <Node Id="MyNode" MyFirstReference="MyFirstDocument" MySecondReference="MySecondDocument"/>
       <Node Id="MySecondNode" MyFirstReference="AnotherFirstDocument" MySecondReference="AnotherSecondDocument"/>
    </Nodes>
    <Properties>
       <Property Id="MyFirstReference" Label="My First Document" DataType="System.String" IsReference="True" ReferenceTemplate="http://www.Fabrikam.com/FirstDocuments/{0}.asp"/>
       <Property Id="MySecondReference" Label="My Second Document" DataType="System.String" IsReference="True" ReferenceTemplate=" http://www.Fabrikam.com/SecondDocuments/{0}.asp"/>
    </Properties>
    
  4. 执行下列任务之一以查看引用的项:

    查看

    执行以下步骤

    单一项

    双击节点。

    - 或 -

    右击节点,指向“转到”,然后单击相应项。

    多个项

    右击节点,指向“转到”,然后单击一项。

创建常用路径的别名

将常用路径替换为别名有助于减小 .dgml 文件的大小和加载或保存该文件所需的时间。 若要创建别名,请在 .dgml 文件的结尾处添加 <Paths></Paths> 部分。 在此部分添加 <Path/> 元素以定义路径的别名:

<Paths>
   <Path Id="MyPathAlias" Value="C:\...\..." />
</Paths>

若要从 .dgml 文件中的某个元素引用别名,请用美元符号 ($) 和括号 (()) 将 <Path/> 元素的 Id 值括起来。

<Nodes>
   <Node Id="MyNode" Reference="$(MyPathAlias)MyDocument.txt" />
</Nodes>
<Properties>
   <Property Id="Reference" Label="My Document" DataType="System.String" IsReference="True" />
</Properties>

了解定向图形标记语言 (DGML)

DGML 使用简单 XML 来描述循环和非循环定向关系图。 定向关系图是一组由链接或边缘连接的节点。 可以使用节点和链接来表示网络结构,如软件项目中的元素。 使用 DGML 可执行以下操作:可视化信息、执行复杂性分析或仅浏览和编辑定向关系图。

节点和链接称为关系图元素或简称为元素。 下表描述在 DGML 中使用的元素的种类:

提示

在编辑 .dgml 文件时,IntelliSense 可帮助您标识对每个元素及其值可用的特性。 若要指定特性中的颜色,请使用常用颜色的名称,如“Blue”或 ARGB 十六进制值(如“#ffa0b1c3”)。 DGML 使用一小部分 Windows Presentation Foundation (WPF) 颜色定义格式。 有关更多信息,请参见 Colors 类

元素

示例格式

<DirectedGraph></DirectedGraph>

此元素是定向关系图 (.dgml) 文档的根元素。 所有其他 DGML 元素将在此元素的范围内出现。

下面的列表描述可包含的可选特性:

  • Background - 关系图的背景色

  • BackgroundImage - 用作关系图背景的图像文件的位置。

  • ButterflyMode - 如果为 True,则仅显示与所选节点处于相同路径上的链接节点。 如果未选择节点,则关系图将选择主集线器。

    注意注意
    循环链接不会出现在此模式中。而是会复制参与循环关系的节点,以使它们同时出现在所选节点的两侧。距所选节点的距离超过一个级别的依赖关系将不一定按顺序出现,因为关系图布局是根据以所选节点为起点的最短路径确定的。

    有关更多信息,请参见如何:在关系图文档中浏览和导航

  • GraphDirection - 在关系图设置为树布局 (Sugiyama) 时排列节点,以使大多数链接都按指定的方向流动:TopToBottom、BottomToTop、LeftToRight 或 RightToLeft。 有关更多信息,请参见如何:在关系图文档中浏览和导航

  • Layout - 将关系图设置为下列布局:None、Sugiyama(树布局)、ForceDirected(快速群集)或 DependencyMatrix。 有关更多信息,请参见如何:在关系图文档中浏览和导航

  • NeighborhoodDistance - 当关系图设置为树布局或快速群集布局时,仅显示那些离开所选节点指定链接数 (1-7) 的节点。 有关更多信息,请参见如何:在关系图文档中浏览和导航

  • Title - 关系图的名称

  • ZoomLevel - 最初显示关系图时使用的缩放级别。 指定一个浮点值(其中 1 表示 100%)或指定 Fit 以使关系图适合窗口的大小。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" Background="Blue" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      ...
   </Nodes>
   <Links>
      ...
   </Links>
   <Categories>
      ...
   </Categories>
   <Properties>
      ...
   </Properties>
</DirectedGraph>

<Nodes></Nodes>

此可选元素包含 <Node/> 元素的列表,这些元素可定义关系图上的节点。 有关更多信息,请参见 <Node/> 元素。

注意注意
在 <Link/> 元素中引用未定义的节点时,关系图会自动创建 <Node/> 元素。
<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      <Node ... />
   </Nodes>
   <Links>
      <Link ... />
   </Links>
</DirectedGraph>

<Node/>

此元素定义单个节点。 该节点将出现在 <Nodes><Nodes/> 元素列表内。

此元素必须包括以下特性:

  • Id - 节点的唯一名称和 Label 特性的默认值(如果未指定单独的 Label 特性)。 此名称必须与引用它的链接的 Source 或 Target 特性匹配。

下面的列表描述可包含的部分可选特性:

  • Label - 节点的显示名称

  • 样式特性。 有关更多信息,请参见将自定义样式应用于节点和链接。

  • Category - 标识共享此特性的元素的类别的名称。 有关更多信息,请参见 <Category/> 元素。

  • Property - 标识具有相同属性值的元素的属性的名称。 有关更多信息,请参见 <Property/> 元素。

  • Group - 如果节点包含其他节点,请将此特性设置为 Expanded 或 Collapsed 以显示或隐藏其内容。 必须有一个 <Link/> 元素,此元素包含 Category="Contains" 特性并将父节点指定为源节点,而将子节点指定为目标节点。 有关更多信息,请参见将节点组织为组。

  • Visibility - 将此特性设置为 Visible、Hidden 或 Collapsed。 使用 System.Windows.Visibility。 有关更多信息,请参见隐藏或显示节点。

  • Reference - 将此特性设置为链接到文档或 URL。 有关更多信息,请参见将项链接到节点。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      <Node Id="Driver" Label="Student" Category="Person" />
      <Node Id="Passenger" Label="Instructor" Category="Person" />
      <Node Id="Car" Label="Car" Category="Automobile" />
      <Node Id="Truck" Label="Truck" ategory="Automobile" />
   </Nodes>
   <Links>
      <Link ... />
   </Links>
   <Categories>
      <Category Id="Person" Background="Orange" />
      <Category Id="Automobile" Background="Yellow"/>
   </Categories>
</DirectedGraph>

<Links></Links>

此元素包含 <Link> 元素的列表,这些元素可定义两个节点之间的链接。 有关更多信息,请参见 <Link/> 元素。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Links>
      <Link ... />
   </Links>
</DirectedGraph>

<Link/>

此元素定义一个用于将源节点连接到目标节点的链接。 该链接将出现在 <Links></Links> 元素列表内。

注意注意
如果此元素引用未定义的节点,则关系图文档将自动创建具有指定特性(如果有)的节点。

此元素必须包括以下特性:

  • Source - 链接的源节点

  • Target - 链接的目标节点

下面的列表描述可包含的部分可选特性:

  • Label - 链接的显示名称

  • 样式特性。 有关更多信息,请参见将自定义样式应用于节点和链接。

  • Category - 标识共享此特性的元素的类别的名称。 有关更多信息,请参见 <Category/> 元素。

  • Property - 标识具有相同属性值的元素的属性的名称。 有关更多信息,请参见 <Property/> 元素。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      <Node Id="Driver" Label="Student" Category="Person" />
      <Node Id="Passenger" Label="Instructor" Category="Person" />
      <Node Id="Car" Label="Car" Category="Automobile" />
      <Node Id="Truck" Label="Truck" Category="Automobile" />
   </Nodes>
   <Links>
      <Category Id="Person" Background="Orange" />
      <Category Id="Automobile" Background="Yellow"/>
      <Link Source="Driver" Target="Car" Label="Passed" Stroke="Black" Background="Green" Category="PassedTest" />
      <Link Source="Driver" Target="Truck" Label="Failed" Stroke="Black" Background="Red" Category="PassedTest" />
   </Links>
</DirectedGraph>

<Categories></Categories>

此元素包含 <Category/> 元素的列表。 有关更多信息,请参见 <Category/> 元素。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Categories>
       <Category ... />
   </Categories>
</DirectedGraph>

<Category/>

此元素定义 Category 特性,此特性用于标识共享此特性的元素。 Category 特性可用于组织关系图元素,通过继承提供共享特性或定义其他元数据。

此元素必须包括以下特性:

  • Id - 类别的唯一名称和 Label 特性的默认值(如果未指定单独的 Label 特性)。

下面的列表描述可包含的部分可选特性:

  • Label - 类别的读者友好名称。

  • BasedOn - 当前元素的 <Category/> 继承自的父类别。

    在此元素的示例中,FailedTest 类别从 PassedTest 类别继承其 Stroke 特性。 有关更多信息,请参见为节点和链接分配类别中的“创建分层类别”。

类别还提供一些基本模板行为,这些行为用于控制节点和链接在关系图上显示的外观。 有关更多信息,请参见将自定义样式应用于节点和链接。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      <Node Id="Driver" Label="Driver" Category="Person" />
      <Node Id="Car" Label="Car" Category="Automobile" />
      <Node Id="Truck" Label="Truck" Category="Automobile" />
      <Node Id="Passenger" Category="Person" />
   </Nodes>
   <Links>
      <Link Source="Driver" Target="Car" Label="Passed" Category="PassedTest" />
      <Link Source="Driver" Target="Truck" Label="Failed" Category="FailedTest" />
   </Links>
   <Categories>
      <Category Id="Person" Background="Orange" />
      <Category Id="Automobile" Background="Yellow"/>
      <Category Id="PassedTest" Label="Passed" Stroke="Black" Background="Green" />
      <Category Id="FailedTest" Label="Failed" BasedOn="PassedTest" Background="Red" />
   </Categories>
</DirectedGraph>

<Properties></Properties>

此元素包含 <Property/> 元素的列表。 有关更多信息,请参见 <Property/> 元素。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Properties>
       <Property ... />
   </Properties>
</DirectedGraph>

<Property/>

此元素定义 Property 特性,此特性可用于将值分配给任何 DGML 元素或特性(包括类别和其他属性)。

此元素必须包括以下特性:

  • Id - 该属性的唯一名称和 Label 特性的默认值(如果未指定单独的 Label 特性)。

  • DataType - 该属性存储的数据的类型

如果您希望该属性在“属性”窗口中显示,请使用 Label 属性以指定该属性的显示名称。

有关更多信息,请参见为节点和链接分配属性。

<?xml version="1.0" encoding="utf-8"?>
<DirectedGraph Title="DrivingTest" xmlns="https://schemas.microsoft.com/vs/2009/dgml">
   <Nodes>
      <Node Id="Driver" Label="Driver" Category="Person" DrivingAge="18"/>
      <Node Id="Car" Label="Car" Category="Automobile" />
      <Node Id="Truck" Label="Truck" Category="Automobile" />
      <Node Id="Passenger" Category="Person" />
   </Nodes>
   <Links>
      <Link Source="Driver" Target="Car" Label="Passed" Category="PassedTest" />
      <Link Source="Driver" Target="Truck" Label="Failed" Category="FailedTest" />
   </Links>
   <Categories>
      <Category Id="Person" Background="Orange" />
      <Category Id="Automobile" Background="Yellow"/>
      <Category Id="PassedTest" Label="Passed" Stroke="Black" Background="Green" />
      <Category Id="FailedTest" Label="Failed" BasedOn="PassedTest" Background="Red" />
   </Categories>
   <Properties>
       <Property Id="DrivingAge" Label="Driving Age" DataType="System.Int32" />
   </Properties>
</DirectedGraph>

请参见

概念

如何:生成 .NET 代码的依赖项关系图

其他资源

如何:在关系图文档中浏览和导航

如何:使用依赖项关系图浏览代码