Partager via


TextField Class

Lightweight object that represents a part of a shape that can display text labels or areas.

Inheritance Hierarchy

System.Object
  Microsoft.VisualStudio.Modeling.Diagrams.ShapeField
    Microsoft.VisualStudio.Modeling.Diagrams.TextField
      Microsoft.VisualStudio.Modeling.Diagrams.LabelTextField

Namespace:  Microsoft.VisualStudio.Modeling.Diagrams
Assembly:  Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0 (in Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0.dll)

Syntax

'Declaration
Public Class TextField _
    Inherits ShapeField
public class TextField : ShapeField
public ref class TextField : public ShapeField
type TextField =  
    class 
        inherit ShapeField 
    end
public class TextField extends ShapeField

The TextField type exposes the following members.

Constructors

  Name Description
Public method TextField Initializes a new instance of the TextField class.

Top

Properties

  Name Description
Public property AnchoringBehavior Describes how the content of the field should position and size itself in relation to the parent ShapeElement. (Inherited from ShapeField.)
Public property DefaultAccessibleDescription Gets or sets the default accessible description. (Inherited from ShapeField.)
Public property DefaultAccessibleName Gets or sets the default name of the shape field for the accessible object. (Inherited from ShapeField.)
Public property DefaultAccessibleState Gets the default state of the shape field for the accessible object. (Inherited from ShapeField.)
Public property DefaultAutoSize If true, the text field's minimum reported size will grow to accomodate the length of the diplay text. Autosizable text fields will still respect the minimum size specified in the AnchoringBehavior.
Public property DefaultBackgroundBrushId Gets or sets the ID of the default brush to paint the background of the shape field. (Inherited from ShapeField.)
Public property DefaultCommitOnEscape Gets or sets a value indicating whether the Escape key commits the edit. If true, the Enter key will be used as a CRLF for in-place editing.
Public property DefaultFocusable Gets the shape field and verifies whether it can receive focus, or gives the shape field the ability to receive focus. (Inherited from ShapeField.)
Public property DefaultFontId Gets or sets the default font id.
Public property DefaultInactiveSelectedBackgroundBrushId Gets or sets the ID of the default background brush for the shape field. (Inherited from ShapeField.)
Public property DefaultInactiveSelectedTextBrushId Gets or sets the default brush id for the inactive selected text.
Public property DefaultIsHorizontal Gets or sets the default horizontal state for the text.
Public property DefaultMultipleLine If true, the text automatically wraps over more than one line to fit into the width available.
Public property DefaultPenId Gets or sets the ID of the default pen to use for the shape field. (Inherited from ShapeField.)
Public property DefaultReflectParentFocusedState Gets the child shape field and verifies whether it should receive focus when its parent shape receives focus or sets the ability to reflect the focus state of its parent shape. (Inherited from ShapeField.)
Public property DefaultReflectParentSelectedState Gets the child shape field and verifies whether it should be selected when its parent shape is selected or sets the ability to reflect the selection state of its parent shape. (Inherited from ShapeField.)
Public property DefaultSelectable Gets the shape field and verifies whether it can be selected by default or sets the default selection state of the shape field. (Inherited from ShapeField.)
Public property DefaultSelectedBackgroundBrushId Gets or sets the ID of the default background brush for the shape field. (Inherited from ShapeField.)
Public property DefaultSelectedTextBrushId Gets or sets the default brush id for the selected text.
Public property DefaultStringFormat Gets or sets the default string format for text drawing.
Public property DefaultText Gets or sets the default text to draw.
Public property DefaultTextBrushId Gets or sets the default brush id for the text.
Public property DefaultVisibility Gets the shape field and verifies whether it appears by default or sets the default visibility of the shape field. (Inherited from ShapeField.)
Public property DisplayMember Gets or sets the property name that the display text is associated with.
Public property DrawBorder (Do not use - will be changed)
Public property FillBackground (Do not use - will be changed)
Public property Name Gets the name of the shape field. (Inherited from ShapeField.)

Top

Methods

  Name Description
Public method AccessibleDoDefaultAction Performs the default action for the accessible object. (Inherited from ShapeField.)
Public method AllowInPlaceEditorAutoSize By default, allow in-place editor to size automatically if the field supports auto-size. (Overrides ShapeField.AllowInPlaceEditorAutoSize(ShapeElement).)
Public method AssociateValueWith(Store, AssociatedPropertyInfo) Associates the shape field with a domain property that is assigned to a shape element. (Inherited from ShapeField.)
Public method AssociateValueWith(Store, Guid) Associates the shape field with a domain property that is assigned to a shape element. (Inherited from ShapeField.)
Public method AssociateValueWith(Store, Guid, AssociatedPropertyInfo) Associates the shape field with a domain property that is assigned to a shape element. (Inherited from ShapeField.)
Public method AssociateVisibilityWith(Store, AssociatedPropertyInfo) Associates the visibility of the shape field with a domain property that is assigned to a shape element. (Inherited from ShapeField.)
Public method AssociateVisibilityWith(Store, Guid) Associates the visibility of the shape field with a domain property that is assigned to a shape element. (Inherited from ShapeField.)
Public method AssociateVisibilityWith(Store, Guid, AssociatedPropertyInfo) Associates the visibility of the shape field with a domain property that is assigned to a shape element. (Inherited from ShapeField.)
Public method CanEditValue Returns a value indicating whether the value of this field can be edited. (Overrides ShapeField.CanEditValue(ShapeElement, DiagramClientView).)
Public method CommitPendingEdit Commits the pending edit. (Overrides ShapeField.CommitPendingEdit(ShapeElement, DiagramClientView).)
Public method DoHitTest Performs a hit test on a specified point in the diagram to determine whether the point is in the bounds of the shape field. (Inherited from ShapeField.)
Public method DoKeyboardNavigation Navigates in the shape field by using the keyboard. (Inherited from ShapeField.)
Public method DoPaint Draws the text field. (Overrides ShapeField.DoPaint(DiagramPaintEventArgs, ShapeElement).)
Public method EditValue(ShapeElement, DiagramClientView) Invokes the in-place editor. (Overrides ShapeField.EditValue(ShapeElement, DiagramClientView).)
Public method EditValue(ShapeElement, DiagramClientView, PointD) Invokes the in-place editor, setting the caret using the specified mouse position. (Overrides ShapeField.EditValue(ShapeElement, DiagramClientView, PointD).)
Public method EditValue(ShapeElement, DiagramClientView, String) Invokes the in-place editor, replacing the text with the specified text.
Public method Equals Determines whether the specified object is equal to the current object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method FindFirstChild Locates the first child shape field in the parent shape field. (Inherited from ShapeField.)
Public method FindLastChild Locates the last child shape field in the parent shape field. (Inherited from ShapeField.)
Public method FindNextChild Locates the next child shape field in the parent shape field. (Inherited from ShapeField.)
Public method FindNextInChildSubFields Locates the next child shape field in the navigation sequence. (Inherited from ShapeField.)
Public method FindPreviousChild Locates the previous child shape field in the parent shape field. (Inherited from ShapeField.)
Public method FindPreviousInChildSubFields Locates the previous child shape field in the navigation sequence. (Inherited from ShapeField.)
Public method Focused Gets the shape field and verifies whether it has focus. (Inherited from ShapeField.)
Public method GetAccessibilityObject Gets the accessibility object that is assigned to the shape field. (Inherited from ShapeField.)
Public method GetAccessibleChild Gets the Accessibility object for the child shape field. (Inherited from ShapeField.)
Public method GetAccessibleChildCount Gets the number of Accessibility objects that are assigned to the parent shape field and its child shape fields. (Inherited from ShapeField.)
Public method GetAccessibleDefaultActionDescription Gets the default purpose of the shape field for the accessible object. (Inherited from ShapeField.)
Public method GetAccessibleDescription Returns the default accessible description for a text field. (Overrides ShapeField.GetAccessibleDescription(ShapeElement).)
Public method GetAccessibleHelp Gets the shape field Help for the accessible object. (Inherited from ShapeField.)
Public method GetAccessibleHelpTopicFileName Gets a topic in the Help for the accessible object. (Inherited from ShapeField.)
Public method GetAccessibleHelpTopicId Gets the ID that is assigned to the Help topic for the accessible object. (Inherited from ShapeField.)
Public method GetAccessibleName Returns the display text as the accessible name. (Overrides ShapeField.GetAccessibleName(ShapeElement).)
Public method GetAccessibleRole Retrieves the accessible role of this ShapeField. (Overrides ShapeField.GetAccessibleRole(ShapeElement).)
Public method GetAccessibleState Retrieves the accessible state of this TextField. By default, the TextField is invisible to accessibility clients if the field is not focusable and there is no text to display. (Overrides ShapeField.GetAccessibleState(ShapeElement, DiagramClientView).)
Public method GetAccessibleValue Returns the accessible value. (Overrides ShapeField.GetAccessibleValue(ShapeElement).)
Public method GetActiveInPlaceEditor Returns the control for the active in-place editor. This method may return null, in which case no in-place editor is active for this field. (Overrides ShapeField.GetActiveInPlaceEditor(ShapeElement, DiagramClientView).)
Public method GetAutoSize If true, the text field's minimum required size will grow to accomodate the length of the diplay text. Autosizable text fields will still respect the minimum size specified in the AnchoringBehavior.
Public method GetBackgroundBrush Gets the brush that draws the background for the shape element to which this shape field is assigned. (Inherited from ShapeField.)
Public method GetBackgroundBrushId Gets the ID of the brush that draws the background for the shape element to which this shape field is assigned. (Inherited from ShapeField.)
Public method GetBounds Gets the bounds for the shape field. (Inherited from ShapeField.)
Public method GetCursor Gets the pointer that appears when the mouse is pointing to the shape field. (Inherited from ShapeField.)
Public method GetDisplayText Gets the text to be displayed by this field.
Public method GetFocusable Gets the shape field and verifies whether it can receive focus. (Inherited from ShapeField.)
Public method GetFont Gets the font to draw with for the specified ShapeElement instance.
Public method GetFontHeight Gets the line spacing of this font (i.e., the height of a line of text) in world units. Line spacing is the ascent + the descent + some recommended extra. The ascent is the height of the character above the baseline, and the descent is the height of the character below the baseline. The extra is below the descent.
Public method GetFontId Gets the id of the font to draw with for the specified ShapeElement instance.
Public method GetHashCode Serves as the default hash function. (Inherited from Object.)
Public method GetInPlaceEditorBounds Gets the bounds for the in-place editor. (Inherited from ShapeField.)
Public method GetMaximumInPlaceEditorSize By default, we allow the in-place edit control to resize up to 75 characters. (Overrides ShapeField.GetMaximumInPlaceEditorSize(ShapeElement).)
Public method GetMinimumInPlaceEditorSize Minimum in-place editor size is based on minimum width in characters and height in lines. (Overrides ShapeField.GetMinimumInPlaceEditorSize(ShapeElement).)
Public method GetMinimumSize Gets the minimum width and heightfor this ShapeField in world units (Overrides ShapeField.GetMinimumSize(ShapeElement).)
Public method GetMultipleLine If true, the text can wrap onto more than one line to fit the width available.
Public method GetPen Gets the pen that draws the shape element to which the shape field is assigned. (Inherited from ShapeField.)
Public method GetPenId Gets the ID of the pen that draws the shape element to which the shape field is assigned. (Inherited from ShapeField.)
Public method GetPotentialMouseAction Gets the mouse action to activate when the user next clicks a specific point on the diagram. (Inherited from ShapeField.)
Public method GetSelectable Gets the shape field and verifies whether it can be selected. (Inherited from ShapeField.)
Public method GetStringFormat Gets the string format to draw the text with for the specified ShapeElement instance.
Public method GetTextBrush Gets the brush to draw the text with for the specified ShapeElement instance.
Public method GetTextBrushId Gets the id of the brush to draw the text with for the specified ShapeElement instance.
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Public method GetValue Gets the value for this TextField. (Overrides ShapeField.GetValue(ShapeElement).)
Public method GetValueDomainPropertyInfo Gets the domain property that is assigned to the value in the shape field. (Inherited from ShapeField.)
Public method GetVisible Gets the shape field and verifies whether it appears. (Inherited from ShapeField.)
Public method HasFocusedAppearance Gets the shape field and verifies whether it should appear to have the focus. (Inherited from ShapeField.)
Public method HasPendingEdit Returns a value indicating whether in-place editing is active, with a commit pending. (Overrides ShapeField.HasPendingEdit(ShapeElement, DiagramClientView).)
Public method HasSelectedAppearance Gets the shape field and verifies whether it appears to be selected. (Inherited from ShapeField.)
Public method IsNavigationKey(Char) Gets the key that the user pressed and verifies whether it can be used to navigate between shape fields. (Inherited from ShapeField.)
Public method IsNavigationKey(Keys) Gets the keys that the user pressed and verifies whether they can be used to navigate between shape fields. (Inherited from ShapeField.)
Protected method MeasureDisplayText Helper method to measure given text.
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method NavigateAscend Moves the focus to the previous shape field in the navigation sequence for the selected shapes. (Inherited from ShapeField.)
Public method NavigateDescend Moves the focus to the next shape field in the navigation sequence for the selected shapes. (Inherited from ShapeField.)
Public method NavigateToFirst Moves the focus to the first shape field in the navigation sequence for the selected shapes. (Inherited from ShapeField.)
Public method NavigateToLast Moves the focus to the last shape field in the navigation sequence for the selected shapes. (Inherited from ShapeField.)
Public method NavigateToNext Moves the focus to the next shape field in the navigation sequence for the selected shapes. (Inherited from ShapeField.)
Public method NavigateToPrevious Moves the focus to the previous shape field in the navigation sequence for the selected shapes. (Inherited from ShapeField.)
Protected method OnBeginEdit Alerts listeners when in-place editing has begun. (Inherited from ShapeField.)
Public method OnClick Alerts listeners when the user has clicked a shape field. (Inherited from ShapeField.)
Public method OnDoubleClick Invokes in-place editing by default. (Overrides ShapeField.OnDoubleClick(DiagramPointEventArgs).)
Protected method OnEndEdit Alerts listeners when in-place editing has completed. (Inherited from ShapeField.)
Public method OnKeyDown Alerts listeners when the user has held down a key when pointing to a shape field. (Inherited from ShapeField.)
Public method OnKeyPress Invokes the editor if the field is editable and any alpha-numeric character is typed. (Overrides ShapeField.OnKeyPress(DiagramKeyPressEventArgs).)
Public method OnKeyUp Alerts listeners when the user has released a key when pointing to a shape field. (Inherited from ShapeField.)
Public method OnMouseDown Alerts listeners when the user is holding down the mouse over a shape field. (Inherited from ShapeField.)
Public method OnMouseMove Alerts listeners when the mouse has been moved over a shape field. (Inherited from ShapeField.)
Public method OnMouseUp Alerts listeners when the user has released the mouse button over a shape field. (Inherited from ShapeField.)
Public method OnMouseWheel Alerts listeners when the mouse has been rotated over a shape field. (Inherited from ShapeField.)
Public method Selected Gets the shape field and verifies whether it is selected. (Inherited from ShapeField.)
Public method SetSelectionRange Sets the selection to a range of child shape fields. (Inherited from ShapeField.)
Public method SetValue Assigns the specified value to a shape field. (Inherited from ShapeField.)
Public method SetVisible Sets the visibility of the shape field. (Inherited from ShapeField.)
Public method ToString Returns a string that represents the current object. (Inherited from Object.)

Top

Remarks

When you define a text decorator in a shape, it is represented by a TextField. For examples of the initialization of TextFields and other ShapeFields, inspect Dsl\GeneratedCode\Shapes.cs in your DSL solution.

A TextField is an object that manages an area within a shape, such as the space assigned to a label. One TextField instance is shared between many shapes of the same class. The TextField instance does not store the text of the label separately for each instance: instead, the GetDisplayText(ShapeElement) method takes the shape as a parameter, and can look up the text dependent on the current state of the shape and its model element.

How the appearance of a text field is determined

The default DoPaint() method performs these tasks. This is a simplified presentation of its code:

// 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; }

There are several other pairs of Get methods and Default properties, such as DefaultMultipleLine/GetMultipleLine(). You can assign a value to the Default property to change the value for all instances of the shape field. To make the value vary from one shape instance to another, or dependent on the state of the shape or its model element, override the Get method.

Static customizations

If you want to change every instance of this shape field, first find out whether you can set the property in the DSL Definition. For example, you can set font size and style in the Properties window.

If not, then override the InitializeShapeFields method of your shape class, and assign a value to the appropriate Default... property of the text field.

Warning

To override InitializeShapeFields(), you must set the Generates Double Derived property of the shape class to true in the DSL Definition.

In this example, a shape has a text field that will be used for user comments. We want to use the standard comment font. Because it is a standard font from the style set, we can set the default font 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;

Dynamic customizations

To make the appearance vary dependent on the state of a shape or its model element, derive your own subclass of TextField and override one or more Get... methods. You must also override your shape’s InitializeShapeFields method, and replace the instance of the TextField with an instance of your own class.

The following example makes the font of a text field dependent on the state of a Boolean domain property of the shape’s model element.

To run this example code, create a new DSL solution using the Minimal Language template. Add a Boolean domain property AlternateState to the ExampleElement domain class. Add an icon decorator to the ExampleShape class, and set its image to a bitmap file. Click Transform All Templates. Add a new code file in the DSL project, and insert the following code.

To test the code, press F5 and, in the debugging solution, open a sample diagram. The default state of the icon should appear. Select the shape and in the Properties window, change the value of the AlternateState property. The font of the element name should change.

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);
    }

  }

Style sets

The preceding example shows how you can change the text field to any font that is available. However, a preferable method is to change it to one of a set of styles that is associated with the shape or with the application. To do this, you override GetFontId or GetTextBrushId().

Alternatively, consider changing the style set of your shape by overriding InitializeResources. This has the effect of changing the fonts and brushes for all of the shape fields.

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

Reference

Microsoft.VisualStudio.Modeling.Diagrams Namespace

InitializeShapeFields

StyleSet

ShapeField