TextField 类
表示形状的部分可以显示文本标签或区域的轻型对象。
继承层次结构
System.Object
Microsoft.VisualStudio.Modeling.Diagrams.ShapeField
Microsoft.VisualStudio.Modeling.Diagrams.TextField
Microsoft.VisualStudio.Modeling.Diagrams.LabelTextField
命名空间: Microsoft.VisualStudio.Modeling.Diagrams
程序集: Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0(在 Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0.dll 中)
语法
声明
Public Class TextField _
Inherits ShapeField
public class TextField : ShapeField
TextField 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
TextField | 初始化 TextField 类的新实例。 |
页首
属性
名称 | 说明 | |
---|---|---|
AnchoringBehavior | 描述字段的内容应如何有关父 ShapeElement 确定和调整大小。 (继承自 ShapeField。) | |
DefaultAccessibleDescription | 获取或设置默认值可访问的说明。 (继承自 ShapeField。) | |
DefaultAccessibleName | 获取或设置形状字段的默认名称可访问对象的。 (继承自 ShapeField。) | |
DefaultAccessibleState | 获取形状字段的默认状态可访问对象的。 (继承自 ShapeField。) | |
DefaultAutoSize | 如果为 true,文本字段的最小值报告范围将成长为容纳该 diplay 文本的长度。Autosizable 文本字段将允许在 AnchoringBehavior 指定的最小尺寸。 | |
DefaultBackgroundBrushId | 获取或设置默认画笔的 ID 绘制形状字段的背景。 (继承自 ShapeField。) | |
DefaultCommitOnEscape | 获取或设置一个转义键是否的值进行编辑。如果为 true, enter 键将用作 CRLF 为就地编辑。 | |
DefaultFocusable | 获取形状字段并验证它是否能接收焦点,或者为形状字段能够接收焦点。 (继承自 ShapeField。) | |
DefaultFontId | 获取或设置默认字体 ID. | |
DefaultInactiveSelectedBackgroundBrushId | 获取或设置默认背景画笔的形状 ID 字段。 (继承自 ShapeField。) | |
DefaultInactiveSelectedTextBrushId | 获取或设置非活动选定文本的默认画笔 ID。 | |
DefaultIsHorizontal | 获取或设置默认值该文本的水平状态。 | |
DefaultMultipleLine | 如果为 true,超过相应的一行的自动文本换行到可用宽度。 | |
DefaultPenId | 获取或设置默认钢笔的 ID 为形状字段。 (继承自 ShapeField。) | |
DefaultReflectParentFocusedState | 获取子形状字段并验证是否应接收焦点,其父形状接收焦点或设置能够反映其父形状时焦点状态。 (继承自 ShapeField。) | |
DefaultReflectParentSelectedState | 获取子形状字段并验证是否应选择它,其父形状中选择或设置能够反映其父形状中选择状态。 (继承自 ShapeField。) | |
DefaultSelectable | 获取形状字段并验证它是否可以选择默认情况下或设置形状字段的默认值选择状态。 (继承自 ShapeField。) | |
DefaultSelectedBackgroundBrushId | 获取或设置默认背景画笔的形状 ID 字段。 (继承自 ShapeField。) | |
DefaultSelectedTextBrushId | 获取或设置选定的文本的默认画笔 ID。 | |
DefaultStringFormat | 获取或设置文本绘制的默认字符串格式。 | |
DefaultText | 获取或设置默认文本绘制。 | |
DefaultTextBrushId | 获取或设置文本的默认画笔 ID。 | |
DefaultVisibility | 获取形状字段并验证默认情况下是否显示或设置形状字段的默认值可见性。 (继承自 ShapeField。) | |
DisplayMember | 获取或设置属性名显示文本与关联的。 | |
DrawBorder | (不要使用 - 将更改) | |
FillBackground | (不要使用 - 将更改) | |
Name | 获取形状字段的名称。 (继承自 ShapeField。) |
页首
方法
页首
备注
在定义形状的某个文本修饰器,它由 TextField 表示。 在 TextFields 和其他 ShapeFields 的初始化的示例,请检查 DSL \GeneratedCode\Shapes.cs in your DSL 解决方案。
TextField 是管理在形状内的区域的对象,例如空间分配给标签。 一 TextField 实例共享在同一个类的许多形状之间。 TextField 实例没有为每个实例分别存储标签的文本:相反, GetDisplayText(ShapeElement) 方法采用形状作为参数,并可以查找形状及其模型元素的当前状态的文本依赖项。
文本字段的外观如何确定的
默认 DoPaint() 执行这些任务的方法。 这是其代码的简化了以下更改:
// Simplified version:
public override void DoPaint(DiagramPaintEventArgs e, ShapeElement parentShape)
{
string text = GetDisplayText(shape);
StringFormat format = GetStringFormat(parentShape);
Brush brush = GetTextBrush(e.View, shape);
using (Font font = GetFont(shape))
{
e.Graphics.DrawString(text, font, brush, format);
}
}
// StringFormat determines whether the string is centered etc.
// To customize statically for all instances of this shape field,
// assign to DefaultStringFormat.
// To customize dynamically or per shape, override this:
public virtual StringFormat GetStringFormat(ShapeElement shape)
{ return DefaultStringFormat; }
// Override to customize the displayed string:
public virtual string GetDisplayText(ShapeElement shape)
{ return this.GetValue(shape).ToString(); }
// Brush determines the text color.
// To change the brush for every field, change the shape’s styleset.
// To customize to a brush in the style set, override GetTextBrushId.
// To change the brush to non-standard color, override this.
// Should take account of whether selected.
public virtual Brush GetTextBrush(DiagramClientView view, ShapeElement shape)
{ return shape.StyleSet.GetBrush(this.GetTextBrushId(view, shape)); }
// Brush ID selects a brush from a StyleSet.
// Either return a member of DiagramBrushes
// or add your own brush to the shape or application’s styleset.
// Override this to change dynamically or per instance.
// To change statically, just assign to default values.
public virtual StyleSetResourceId GetTextBrushId(DiagramClientView view, ShapeElement shape)
{ return IsSelected(view, shape) ? (view.Focused ? DefaultSelectedTextBrushId
: DefaultInactiveSelectedTextBrushId ) : DefaultTextBrushId ;
}
// Font determines the shape and size of the text.
// To change the font for every field, change the shape’s styleset.
// To customize to a font in the style set, override GetFontId.
// To change the font to a non-standard font, override this.
public virtual Font GetFont(ShapeElement shape)
{ return shape.StyleSet.GetFont(GetFontId(shape)); }
// Selects a font from a styleset.
// Either return a member of DiagramFonts or
// add your own font to the shape or application’s styleset.
// To change statically for all instances of this field,
// assign to DefaultFontId.
// To change per shape or dynamically, override this.
public virtual StyleSetResourceId GetFontId(ShapeElement parentShape)
{ return DefaultFontId; }
其他几个对 Get 方法和 Default 属性,如 DefaultMultipleLine/GetMultipleLine()。 可以将值分配给默认属性更改形状字段的所有实例的值。 由一个形状实例需要将值更改为另一种或依赖于形状或其模型元素的状态,请重写 Get 方法。
静态自定义项
如果要更改形状字段每个实例,第一个以确定您是否能在 DSL 定义的属性。 例如,可以设置字体大小和样式在 " 属性 " 窗口。
否则,然后重写形状类的 InitializeShapeFields 方法,并将值分配给文本字段的相应 Default... 属性。
警告
若要重写 InitializeShapeFields(),必须将形状类的 生成派生的二进制文件 特性添加到 DSL 定义的 true 。
在此示例中,则形状具有对用户注释将使用的一个文本字段。 我们需要使用标准注释字体。 由于它是从设置的样式的标准字体,可以设置默认字体 ID:
partial class ExampleShape
{ protected override void InitializeShapeFields(IList<ShapeField> shapeFields)
{
// Fields set up according to DSL Definition:
base.InitializeShapeFields(shapeFields);
// Find and update comment field:
TextField commentField = ShapeElement.FindShapeField(shapeFields, "CommentDecorator") as TextField;
// Use the standard font for comments:
commentField.DefaultFontId = DiagramFonts.CommentText;
动态自定义项
若要这次更改使外观依赖于形状或其模型元素的状态,请派生自拥有 TextField 的子类并重写一个或多 Get... 方法。 您还必须重写形状的 InitializeShapeFields 方法,并将实例替换 TextField 的实例拥有类。
下面的示例生成字体文本字段依赖于形状的模型元素的布尔型字段属性的状态。
使用尽可能少的语言模板,若要运行此代码示例,请创建一个新的 DSL 解决方案。 添加一个布尔型字段特性 AlternateState 到 ExampleElement 域类。 添加一个图标修饰器。 ExampleShape 类,并将其图像到位图文件。 单击 转换所有模板。 添加在 DSL 项目和插入的代码文件以下代码。
若要测试代码,请按 F5,因此,在调试解决方案,打开示例关系图。 图标的默认状态应显示。 选择形状,并在 " 属性 " 窗口更改 AlternateState 属性的值。 元素名称的字体应更改。
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;
...
partial class ExampleShape
{
/// <summary>
/// Compose a list of the fields in this shape.
/// Called once for each shape class.
/// </summary>
protected override void InitializeShapeFields(IList<ShapeField> shapeFields)
{
// Fields set up according to DSL Definition:
base.InitializeShapeFields(shapeFields);
// Replace the text field for NameDecorator:
TextField oldField = ShapeElement.FindShapeField(shapeFields, "NameDecorator") as TextField;
shapeFields.Remove(oldField);
// Replace with my text field based on DSL Definition values:
MyTextField newField = new MyTextField(oldField);
shapeFields.Add(newField);
}
}
/// <summary>
/// Dynamic font depends on state of model element.
/// </summary>
public class MyTextField : TextField
{
public MyTextField(TextField prototype)
: base(prototype.Name)
{
DefaultText = prototype.DefaultText;
DefaultFocusable = prototype.DefaultFocusable;
DefaultAutoSize = prototype.DefaultAutoSize;
AnchoringBehavior.MinimumHeightInLines = prototype.AnchoringBehavior.MinimumHeightInLines;
AnchoringBehavior.MinimumWidthInCharacters = prototype.AnchoringBehavior.MinimumWidthInCharacters;
DefaultAccessibleState = prototype.DefaultAccessibleState;
}
public override System.Drawing.Font GetFont(ShapeElement parentShape)
{
// Access the Boolean domain property of the model element:
if ((parentShape.ModelElement as ExampleElement).AlternateState)
return new System.Drawing.Font("Callisto", 14.0f,
System.Drawing.FontStyle.Italic |
System.Drawing.FontStyle.Bold);
else
return base.GetFont(parentShape);
}
}
样式设置
前面的示例演示如何更改文本或字段中可用的所有字体。 但是,较好的方法是将其更改为与形状或与应用程序的安装样式。 为此,需要重写 GetFontId 或 GetTextBrushId()。
或者,请考虑将该样式设置形状由重写的 InitializeResources。 这会更改字体和画笔的影响所有的形状字段。
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。