ImageField 类
表示形状的节中显示图像修饰器或背景的轻量对象。
继承层次结构
System.Object
Microsoft.VisualStudio.Modeling.Diagrams.ShapeField
Microsoft.VisualStudio.Modeling.Diagrams.ImageField
命名空间: Microsoft.VisualStudio.Modeling.Diagrams
程序集: Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0(在 Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.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 类,并将其图像到位图文件。 单击 转换所有模板。 添加在 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) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。