ImageField 类
轻型对象表现部分能显示图像修饰器或背景的形状。
继承层次结构
System.Object
Microsoft.VisualStudio.Modeling.Diagrams.ShapeField
Microsoft.VisualStudio.Modeling.Diagrams.ImageField
命名空间: Microsoft.VisualStudio.Modeling.Diagrams
程序集: Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0(在 Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0.dll 中)
语法
声明
Public Class ImageField _
Inherits ShapeField
public class ImageField : ShapeField
ImageField 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
ImageField(String) | 初始化 ImageField 类的新实例。 | |
ImageField(String, Image) | 初始化 ImageField 类的新实例。 |
页首
属性
名称 | 说明 | |
---|---|---|
AnchoringBehavior | 描述该字段的内容应该如何放置和调整有关父 ShapeElement 大小。 (继承自 ShapeField。) | |
DefaultAccessibleDescription | 获取或设置默认可访问说明。 (继承自 ShapeField。) | |
DefaultAccessibleName | 获取或设置可访问对象的形状字段的默认名称。 (继承自 ShapeField。) | |
DefaultAccessibleState | 为可访问对象获取形状字段的默认状态。 (继承自 ShapeField。) | |
DefaultBackgroundBrushId | 获取或设置用于绘制形状字段的背景的默认画笔的 ID。 (继承自 ShapeField。) | |
DefaultFocusable | 获取形状字段并验证它是否可以接收焦点,或者对形状字段提供接收焦点的功能。 (继承自 ShapeField。) | |
DefaultImage | 获取或设置与此 ImageField 关联的默认图像。默认图像可以通过重写 GetDisplayImage 方法自定义默认图像。 | |
DefaultInactiveSelectedBackgroundBrushId | 获取或设置形状字段的默认背景画笔的 ID。 (继承自 ShapeField。) | |
DefaultPenId | 获取或设置用于形状字段的默认钢笔的 ID。 (继承自 ShapeField。) | |
DefaultReflectParentFocusedState | 获取子形状字段,并确认在其父形状接收焦点或将功能设置为反射其父形状的焦点状态时,它是否应接收焦点。 (继承自 ShapeField。) | |
DefaultReflectParentSelectedState | 获取子形状字段,并确认在选中其父形状或将功能设置为反射其父形状的选中状态时,是否应选中它。 (继承自 ShapeField。) | |
DefaultSelectable | 获取形状字段并验证是否选择默认情况下或设置形状字段的默认选择状态。 (继承自 ShapeField。) | |
DefaultSelectedBackgroundBrushId | 获取或设置形状字段的默认背景画笔的 ID。 (继承自 ShapeField。) | |
DefaultUnscaled | 获取或设置是否应绘制使用有关此字段的绑定取消缩放的图像或是否应缩放图像以适合绑定。 | |
DefaultVisibility | 获取形状字段并验证是否默认情况下显示或设置形状字段的默认可见性。 (继承自 ShapeField。) | |
Name | 获取形状字段的名称。 (继承自 ShapeField。) |
页首
方法
页首
备注
当定义形状的一个图像修饰器,并且,在中,定义图像形状,形状显示的区域。ImageField 管理。 有关 ImageFields 和其他 ShapeFields 的初始化的示例,请检查 Dsl\GeneratedCode\Shapes.cs in your DSL 解决方案。
ImageField 是在管理形状内的区域的对象,例如空间分配给装饰器。 一 ImageField 实例共享在同一形状类的多个形状之间。 ImageField 实例不存储每个形状不同的图像:相反,GetDisplayImage(ShapeElement) 方法将形状用作参数,并可以查阅形状及其模型元素的当前状态的图像依赖项。
如果需要特殊行为 (如变量的图像,可以创建从 ImageField 派生的您自己的类。
创建 ImageField 子类
设置属性 生成派生的双重 在 DSL 父形状定义的类。
重写类形状的 InitializeShapeFields 方法。
- 创建在 DSL 项目的代码文件,然后编写类形状的分部类定义。 重写方法以定义即可。
检查 InitializeShapeFields 代码位于 DSL\GeneratedCode\Shapes .cs 的。
在重写方法,调用基方法创建自己的图像类实例字段。 使用备用列表 shapeFields 的常规映像字段。
示例
此示例对形状的模型元素的状态进行图标更改依赖项。
警告
此示例演示如何使动态的图像修饰器。但是,如果您只希望切换两个图像之间根据模型变量的可用性,较为简单的创建多种图像修饰器,找到将在形状相同的位置,再设置可见性筛选器根据模型变量的特定值。设置此筛选器,选择在 DSL 定义的形状,DSL 打开映射详细信息窗口并单击修饰器选项卡。
使用最小的语言模板,若要运行此代码示例,请创建新 DSL 的解决方案。 将布尔域属性 AlternateState 到 ExampleElement 域类。 将图标添加修饰器。ExampleShape 类,并将其添加到图像位图文件。 Click “转换所有模板”。 DSL 添加到项目的代码文件,并粘贴下面的代码。
若要测试您的代码,请按 F5,另外,在调试解决方案,打开示例关系图。 图标的默认状态应显示。 选择形状并在属性窗口,更改值 AlternateState 属性。 该图标应显示旋转 90 度,然后通过对该形状。
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>
/// <param name="shapeFields"></param>
protected override void InitializeShapeFields(IList<ShapeField> shapeFields)
{
// Fields set up according to DSL Definition:
base.InitializeShapeFields(shapeFields);
// Replace the image field:
ShapeField oldField = ShapeElement.FindShapeField(shapeFields, "IconDecorator");
shapeFields.Remove(oldField);
// Must keep the same name:
MyImageField newField = new MyImageField(oldField.Name);
shapeFields.Add(newField);
newField.DefaultImage = (oldField as ImageField).DefaultImage.Clone() as System.Drawing.Image;
}
}
public class MyImageField : ImageField
{
public MyImageField(string tag) : base(tag) { }
/// <summary>
/// Get the image for this field in the given shape.
/// </summary>
public override System.Drawing.Image GetDisplayImage(ShapeElement parentShape)
{
ExampleElement element = parentShape.ModelElement as ExampleElement;
if (element.AlternateState == true)
return AlternateImage;
else
return base.GetDisplayImage(parentShape);
}
private System.Drawing.Image alternateImage;
public System.Drawing.Image AlternateImage
{
get
{
if (alternateImage == null)
{
// Alternate image is a copy of the default, rotated by 90 degrees:
alternateImage = this.DefaultImage.Clone() as System.Drawing.Image;
alternateImage.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipNone);
}
return alternateImage;
}
}
}
}
线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。