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.12.0(在 Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.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,文本字段的最小的报告大小将增大为可容纳显示文本长度。Autosizable 文本字段仍将与 AnchoringBehavior 中指定的最小大小相关。 | |
DefaultBackgroundBrushId | 获取或设置用于绘制形状字段的背景的默认画笔的 ID。 (继承自 ShapeField。) | |
DefaultCommitOnEscape | 获取或设置指示 Escape 键是否提交编辑的值。如果为 true,输入键将作为就地编辑的 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 类,并将其添加到图像位图文件。 Click “转换所有模板”。 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) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。