Class Panel

GoDiagram®
v10.0.11
by Northwoods Software®

A Panel is a GraphObject that holds other GraphObjects as its elements. A Panel is responsible for sizing and positioning its elements. The elements of a panel are drawn in the order in which they appear in the Elements collection.

The Part class inherits from Panel; Part in turn is the base class of Node and Link.

Inheritance
Panel
Namespace: Northwoods.Go
Assembly: Northwoods.GoDiagram.WinForms.dll
Syntax
public class Panel : GraphObject, IHasContextMenu, IHasToolTip
Remarks

Every Panel has a Type and establishes its own coordinate system. The type of a Panel determines how it will size and arrange its elements:

Using the constructor, the argument can be used to declare the Panel type:

new Panel(PanelType.Horizontal) { ... }

// Full example:
new Panel(PanelType.Horizontal) {
    Width = 60, Height = 60  // panel properties
  }
  .Add(
    new Shape("Rectangle") { Stroke = "lime" },
    new TextBlock("Some Text")
  )  // end of panel definition

For an overview of most Panel types, please read the Introduction page on Panels.

PanelLayoutVertical and PanelLayoutHorizontal panels are frequently used to position two or more GraphObjects vertically above each other or horizontally next to each other. Use the Alignment or Stretch properties on the individual elements to control their position and size. Set IsOpposite to true if you want the elements arranged from right-to-left in Horizontal Panels or from bottom-to-top in Vertical Panels.

PanelLayoutSpot and PanelLayoutAuto panels have a "main" element, signified by the Panel's first element with IsPanelMain set to true. If there is no such element, it uses the first element as the "main" one. Use the Alignment property to position elements with respect to the main element. Use the AlignmentFocus property to further specify the position within Spot Panels. "Spot" and "Auto" Panels should have two or more elements in them.

In PanelLayoutTable panels you will want to set the Row and Column properties on each element. The Alignment and Stretch properties are also useful when an element's table cell is larger than that element.

Please read the Introduction page on Table Panels for more examples and explanation.

PanelLayoutTableRow and PanelLayoutTableColumn panels can only be used as elements within a PanelLayoutTable Panel. They are typically only used in item templates, e.g. for automatically creating rows in a Table Panel based on model data provided in an ItemList. You will still need to specify properties on the individual elements within a TableRow or TableColumn as if they were immediate elements of the containing Table panel.

For an example that uses TableRow Panels, see Records sample.

PanelLayoutGrid panels are often used for the Diagram's Grid.

myDiagram.Grid =
  new Panel(PanelType.Grid) { GridCellSize = new Size(40, 40) }
    .Add(
      new Shape("LineH") { Stroke = "lightgray" },
      new Shape("LineV") { Stroke = "lightgray" }
    );

Or to get a green bar effect:

myDiagram.Grid =
  new Panel(PanelType.Grid) { GridCellSize = new Size(100, 100) }
    .Add(new Shape("BarH") { Fill = "lightgreen", Height = 50 });

But Grid Panels can also be stand alone objects:

new Node(PanelType.Grid) {
    GridCellSize = new Size(6, 6), Width = 60, Height = 60
  }
  .Add(
    new Shape("LineH") { Stroke = "gray" },
    new Shape("LineV") { Stroke = "gray" }
  )

A Grid Panel's elements do not participate in object picking.

Please read the Introduction page on Grid Patterns for more examples and explanation.

PanelLayoutGraduated panels, like Spot and Auto Panels have a "main" element. The other elements within a Graduated Panel are used to define ticks and labels to draw along the main shape's path.

new Part(PanelType.Graduated)
  .Add(
    new Shape { GeometryString = "M0 0 H400 },
    new Shape { GeometryString = "M0 0 V10" },
    // offset to display below ticks
    new TextBlock { SegmentOffset = new Point(0, 12) }
  );

Only the main shape of a Graduated Panel participates in object picking, but a Background can be set if the entire panel needs to be pickable. You cannot set or bind the ItemList of a Graduated Panel. Events on the tick Shapes and TextBlock labels of a Graduated Panel will be ignored. Graduated Panel TextBlock labels cannot be edited.

Rotating the main shape will not rotate the ticks, just as rotating a Spot Panel's main element won't rotate its children. Rotation should generally be done at the Panel level. Another similarity to Spot Panels is that resizing of a Graduated Panel should generally be done on the main shape.

Please read the Introduction page on Graduated Panels for more examples and explanation.

Changing and accessing elements of a Panel

You can change the collection of Elements by calling Add(params GraphObject[]), InsertAt(int, GraphObject), Remove(GraphObject), or RemoveAt(int). You can get direct access to a particular element by calling Elt(int).

Alternatively you can control the number and order of elements that are copies of an item template by setting or binding the ItemList property. This is discussed below.

You can search the visual tree of a Panel for GraphObjects that given a Name using FindElement(string).

Panel Size and Appearance

Panels typically compute their own size based on their elements and Panel Type, but can also be sized by setting DesiredSize, MinSize, and MaxSize. Setting an explicit size on a Panel may cause nested elements of that panel to size themselves differently, especially in the cases of nested elements having a Stretch value or TextBlock's having word wrap.

Panels have no visual components of their own unless a Background is specified or separators are specified either as defaults for the whole Table Panel or on individual RowDefinition/ColumnDefinitions. Panels can specify Padding, to make the Panel larger including its background. Setting a padding when the Panel is constrained in size will reduce the total area that it has to arrange its elements. Setting a Margin will not do this -- instead the Panel will expand in size.

In addition to the GraphObject properties on elements that are only used by certain types of panels, several Panel properties only apply to specific Panel types.

For live examples of all Panel types, see the Introduction page on Panels.

Data Binding

Panels also provide fundamental support for data binding. When a diagram gets a new model or when a diagram's model is augmented with additional data, the diagram automatically creates a new Node or Link whose Data property refers to the corresponding node data or link data object.

For more discussion of data binding, please read the Introduction page on Models and Data Binding.

Panels provide support for automatically creating elements within the Panel based on items in a collection. This is achieved by setting or binding the ItemList property, which acts in a manner similar to the NodeDataSource property. You can supply an ItemTemplate, which must itself be a simple Panel, which is copied to create the element in this container Panel corresponding to an item in the ItemList. This property is analogous to the NodeTemplate property, although for the diagram the template must be a Node, Group, or simple Part.

Much like the NodeTemplateMap, Panel's ItemTemplateMap supports having multiple templates, so that the actual structure of the element created for a data item can be chosen dynamically. Just as the NodeCategoryProperty determines which template in the NodeTemplateMap is copied to create a Node, the ItemCategoryProperty names the data property whose value chooses the Panel in the ItemTemplateMap to copy for the item.

When binding the ItemList property, it is commonplace to customize the model's copying processes, by supplying a custom CopyNodeDataFunction.

For more discussion and examples of item lists, please read the Introduction page on Item Lists.

Constructors

Panel()

Constructs an empty Panel of the given Type. Default type is PanelLayoutPosition.

Declaration
public Panel()
Remarks

The default Panel type is PanelLayoutPosition.

Panel(PanelLayout)

Constructs an empty Panel of the given PanelLayout Type. The default type is PanelLayoutPosition. The panel type must be a PanelLayout instance.

Declaration
public Panel(PanelLayout type)
Parameters
Type Name Description
PanelLayout type

if null, the default Panel type is PanelLayoutPosition.

Panel(string)

Constructs an empty Panel of the given PanelLayout Type. The panel type can be a string describing one of the built-in PanelLayout types, available under the PanelType static class.

Declaration
public Panel(string type)
Parameters
Type Name Description
string type

if the empty string, the default Panel type is PanelLayoutPosition.

Properties

AlignmentFocusName

For Panels which are elements of Spot Panels: Gets or sets the name of this Panel's element that should be used as the alignment object instead of this Panel.

Declaration
public string AlignmentFocusName { get; set; }
Property Value
Type Description
string
Remarks

This allows Spot Panels to align objects that are nested in the element tree of its own elements.

ColumnCount

For Table Panels: This read-only property returns the number of columns.

Declaration
public int ColumnCount { get; }
Property Value
Type Description
int
Remarks

This value is only valid after the Panel has been measured.

ColumnSizing

For Table Panels: Gets or sets how this Panel's columns deal with extra space.

Declaration
public Sizing ColumnSizing { get; set; }
Property Value
Type Description
Sizing
Remarks

Valid values are ProportionalExtra and None. The default is ProportionalExtra.

See Also

Data

Gets or sets the optional model data to which this panel is data-bound.

Declaration
public object Data { get; set; }
Property Value
Type Description
object
Remarks

The data must be an object if this is a Part. The data can be any value if this is a Panel created for an item in an list that was data-bound by the ItemList property. The default value is null.

Setting it to a new value automatically calls UpdateTargetBindings(string) in order to assign new values to all of the data-bound GraphObject properties.

Once you set this property you cannot add, remove, or modify any data bindings on any of the GraphObjects in the visual tree of this Panel, including on this panel itself.

You should not modify this property on a Part that is created automatically to represent model data, nor on a Panel that is created automatically for a data item in the containing Panel's ItemList. Call RemoveNodeData(TNodeData) and AddNodeData(TNodeData) if you want to replace this Part with another one, or call RemoveListItem(IList, int) and InsertListItem(IList, int, object) if you want to replace this Panel with another one.

Although you might not be able to replace this data value if this Part was created automatically by the Diagram, you can still modify that data object's properties. Call the appropriate Model method for changing properties that affect the structure of the diagram. Call Set(object, string, object) for changing other properties that may be the sources of Bindings on GraphObject properties that are in the visual tree of this panel/part.

DefaultAlignment

Gets or sets the default alignment spot of this Panel, used as the alignment for an element when its Alignment value is Default.

Declaration
public Spot DefaultAlignment { get; set; }
Property Value
Type Description
Spot
Remarks

The default value is Default, which is interpreted by the Panel in whatever manner seems reasonable, depending on the Panel type.

DefaultColumnSeparatorDashArray

For Table Panels: Gets or sets the default dash array for a column's separator.

Declaration
public float[] DefaultColumnSeparatorDashArray { get; set; }
Property Value
Type Description
float[]
Remarks

SeparatorStrokeWidth can override this default value.

Must be an array of positive numbers and zeroes, or else null to indicate a solid line.

For example, the array [5, 10] would create dashes of 5 pixels and spaces of 10 pixels.

Setting an array with all zeroes will set the value to null.

Default is null.

See Also

DefaultColumnSeparatorStroke

For Table Panels: Gets or sets the default stroke (color) for columns provided a given column has a nonzero SeparatorStrokeWidth.

Declaration
public Brush DefaultColumnSeparatorStroke { get; set; }
Property Value
Type Description
Brush
Remarks

SeparatorDashArray can override this default value. The default value is null -- no line is drawn.

See Also

DefaultColumnSeparatorStrokeWidth

For Table Panels: Gets or sets the default stroke width for a column's separator.

Declaration
public double DefaultColumnSeparatorStrokeWidth { get; set; }
Property Value
Type Description
double
Remarks

SeparatorStrokeWidth can override this default value. The default value is 1. Any new value must be a real, non-negative number.

See Also

DefaultRowSeparatorDashArray

For Table Panels: Gets or sets the default dash array for a row's separator.

Declaration
public float[] DefaultRowSeparatorDashArray { get; set; }
Property Value
Type Description
float[]
Remarks

SeparatorDashArray can override this default value.

Must be an array of positive numbers and zeroes, or else null to indicate a solid line.

For example, the array [5, 10] would create dashes of 5 pixels and spaces of 10 pixels.

Setting an array with all zeroes will set the value to null.

Default is null.

See Also

DefaultRowSeparatorStroke

For Table Panels: Gets or sets the default stroke (color) for rows provided a given row has a nonzero SeparatorStrokeWidth.

Declaration
public Brush DefaultRowSeparatorStroke { get; set; }
Property Value
Type Description
Brush
Remarks

SeparatorStroke can override this default value. The default value is null -- no line is drawn.

See Also

DefaultRowSeparatorStrokeWidth

For Table Panels: Gets or sets the default stroke width for a row's separator.

Declaration
public double DefaultRowSeparatorStrokeWidth { get; set; }
Property Value
Type Description
double
Remarks

SeparatorStrokeWidth can override this default value. The default value is 1. Any new value must be a real, non-negative number.

See Also

DefaultSeparatorPadding

For Table Panels: Gets or sets the additional padding for rows and columns.

Declaration
public Margin DefaultSeparatorPadding { get; set; }
Property Value
Type Description
Margin
Remarks

Padding is applied both before and after a row or column's contents.

See Also

DefaultStretch

Gets or sets the default stretch of this Panel, used as the stretch for an element when its Stretch value is Default.

Declaration
public Stretch DefaultStretch { get; set; }
Property Value
Type Description
Stretch
Remarks

The default value is Default, which typically resolves to None.

Elements

This read-only property returns an iterator over the collection of the GraphObjects that this panel manages.

Declaration
public IEnumerable<GraphObject> Elements { get; }
Property Value
Type Description
IEnumerable<GraphObject>
Remarks

You can change the collection by calling Add(params GraphObject[]), InsertAt(int, GraphObject), Remove(GraphObject), or RemoveAt(int).

You can also get direct access to individual elements by calling Elt(int).

GraduatedMax

For Graduated Panels: Gets or sets the maximum value represented.

Declaration
public double GraduatedMax { get; set; }
Property Value
Type Description
double
Remarks

Must be greater than GraduatedMin. The default is 100.

GraduatedMin

For Graduated Panels: Gets or sets the minimum value represented.

Declaration
public double GraduatedMin { get; set; }
Property Value
Type Description
double
Remarks

Must be less than GraduatedMax. The default is 0.

GraduatedRange

For Graduated Panels: This read-only property returns the range of values represented by the Panel.

Declaration
public double GraduatedRange { get; }
Property Value
Type Description
double
Remarks

For example, a GraduatedMin of 25 and GraduatedMax of 75 would return 50.

GraduatedTickBase

For Graduated Panels: Gets or sets the base value which is marked with a tick.

Declaration
public double GraduatedTickBase { get; set; }
Property Value
Type Description
double
Remarks

The default is 0.

GraduatedTickUnit

For Graduated Panels: Gets or sets the difference between two consecutive values marked by ticks.

Declaration
public double GraduatedTickUnit { get; set; }
Property Value
Type Description
double
Remarks

Must be positive. The default is 10.

GridCellSize

For Grid Panels: Gets or sets the distance between lines.

Declaration
public Size GridCellSize { get; set; }
Property Value
Type Description
Size
Remarks

The units are in local coordinates. The default is 10x10. Any new width or height must be a positive real number.

GridOrigin

For Grid Panels: Gets or sets an origin point for the grid cells.

Declaration
public Point GridOrigin { get; set; }
Property Value
Type Description
Point
Remarks

The units are in local coordinates. The default is (0,0). Any new value must use real numbers.

IsClipping

For Spot Panels: Gets or sets whether this Panel's main element clips instead of fills.

Declaration
public bool IsClipping { get; set; }
Property Value
Type Description
bool
Remarks

The main element will not paint its stroke, if it has any. This assumes that the main element is a Shape.

For Groups: Gets or sets whether this Group's Placeholder clips its member nodes. For compatibility, if the Group is a PanelLayoutSpot Panel, it will not clip its members.

When this property is true, the Spot panel will size itself to be the intersection of the main element bounds and all other elements' bounds, rather than the union of these bounds.

IsEnabled

Gets or sets whether this Panel or any GraphObject inside the panel actually responds to user click events.

Declaration
public bool IsEnabled { get; set; }
Property Value
Type Description
bool
Remarks

May be used as a Binding target. See how this property is used in Buttons.cs.

This property does not have any effect on picking ("hit-testing") -- that behavior is implemented by the Pickable property. When this property is false, non-click events may still occur on this panel or on objects within this panel. This property is normally only used for Panels that are IsActionable.

Call IsEnabledElement() to decide whether a particular object can be clicked.

See Also

IsOpposite

For Horizontal and Vertical Panels: gets or sets whether this Panel arranges its contents from the typical side (left and top, respectively), or the opposite side (right and bottom, respectively).

Declaration
public bool IsOpposite { get; set; }
Property Value
Type Description
bool
Remarks

The default value is false.

ItemCategoryProperty

Gets or sets the name of the item data property that returns a string describing that data's category.

Declaration
public string ItemCategoryProperty { get; set; }
Property Value
Type Description
string
Remarks

The default value is the name "Category".

This is used to distinguish between different kinds of items in the ItemList.

The name must not be null. If the value is an empty string, the category is assumed to be an empty string, the default category name, for all item data objects. You must not change this property when the ItemList already has a value.

ItemIndex

Gets the index of this Panel's data if it was created to represent an item in its containing Panel's ItemList.

Declaration
public int ItemIndex { get; set; }
Property Value
Type Description
int
Remarks

The default value is double.NaN.

This is only set internally by code such as RebuildItemElements() or InsertListItem(IList, int, object) when building or shifting a Panel representing items in the Panel whose ItemList was set or bound to a list of values.

This property can be used in data bindings within the item template to produce values that depend on its position in the item list. For example:

new Panel {
    ...,
    ItemTemplate =
      new Panel()  // the item Panel
        // set Panel.Background to a color based on the Panel.ItemIndex
        .Bind(
          new Binding("Background", "ItemIndex",
            // using this conversion function
            (i, _) => { return ((int)i % 2 == 0) ? "lightgreen" : "lightyellow"; })
          // bound to this Panel itself, not to the Panel.Data item
          .OfElement()
        )
        .Add(
          new TextBlock().Bind("Text")  // a trivial item template, just showing some text
        )
  }
  .Bind("ItemList", "SomeProperty")

The main element of a Spot or Auto or Link Panel, or the first TableRow or TableColumn element of a Table Panel whose IsPanelMain property is true, will not have this property set to a number, because it will not have been created by RebuildItemElements().

ItemList

Gets or sets a list of values or objects, each of which will be represented by a Panel as elements in this Panel.

Declaration
public IList ItemList { get; set; }
Property Value
Type Description
IList
Remarks

Replacing this list results all of this panel's child elements being replaced with a copy of the Panel found in ItemTemplateMap for each particular item in the list.

Because the software does not receive any notifications when a list is modified, any insertions or removals or replacements of data in the list will not be noticed unless you call InsertListItem(IList, int, object) or RemoveListItem(IList, int). You may also reset this property to its current value (the modified list) or call UpdateTargetBindings(string), if there is a Binding whose target is this property.

When binding this property, it is commonplace to customize the model's copying processes. You can supply a custom CopyNodeDataFunction and perhaps a CopyLinkDataFunction.

Any object that is in this list must only appear once and must not appear in any other ItemLists. Use FindItemPanelForData(object) to find the data-bound Panel created for an object in this panel's item list.

Non-object values in an item list may appear multiple times. An item list may be shared by multiple Panels.

Item lists should not be used with Grid Panels or Graduated Panels as they may not have nested Panels.

ItemTemplate

Gets or sets the default Panel template used as the archetype for item data that are in ItemList.

Declaration
public Panel ItemTemplate { get; set; }
Property Value
Type Description
Panel
Remarks

Setting this property just modifies the ItemTemplateMap by replacing the entry named with the empty string. Any new value must be a Panel but not a Part. By default this property is null.

Copy() when copying a panel will share the ItemTemplateMap between the original panel and the copied panel.

ItemTemplateMap

Gets or sets a dictionary mapping template names to Panels.

Declaration
public IDictionary<string, Panel> ItemTemplateMap { get; set; }
Property Value
Type Description
IDictionary<string, Panel>
Remarks

One of these Panels is copied for each item data that is in the ItemList. Replacing this map will automatically rebuild all of the elements in this Panel.

By default this property is null. All values in the dictionary must be Panels but not Parts.

If you modify this dictionary, by replacing a Panel or by adding or removing a map entry, you need to explicitly call RebuildItemElements() afterwards.

Copy() when copying a panel will share the ItemTemplateMap between the original panel and the copied panel.

LeftIndex

For Table Panels: Gets or sets the first column that this Panel displays.

Declaration
public int LeftIndex { get; set; }
Property Value
Type Description
int
Remarks

The default value is 0.

See Also

Padding

Gets or sets the space between this Panel's border and its content.

Declaration
public Margin Padding { get; set; }
Property Value
Type Description
Margin
Remarks

Unlike Margin, padding expands the area inside of the Panel's border. If this Panel's size is unconstrained, this will increase the size of the panel. If this Panel's size is constrained, this will decrease the total area for the Panel elements to arrange themselves.

Unlike margin, increases in size due to padding are visually covered by the Background.

Padding cannot contain negative numbers. The default value is a Margin of zero.

See Also

RowCount

For Table Panels: This read-only property returns the number of rows.

Declaration
public int RowCount { get; }
Property Value
Type Description
int
Remarks

This value is only valid after the Panel has been measured.

RowSizing

For Table Panels: Gets or sets how this Panel's rows deal with extra space.

Declaration
public Sizing RowSizing { get; set; }
Property Value
Type Description
Sizing
Remarks

Valid values are ProportionalExtra and None. The default is ProportionalExtra.

See Also

TopIndex

For Table Panels: Gets or sets the first row that this Panel displays.

Declaration
public int TopIndex { get; set; }
Property Value
Type Description
int
Remarks

The default value is 0.

See Also

Type

Gets or sets the type of the Panel, which controls how the Panel's elements are measured and arranged.

Declaration
public PanelLayout Type { get; set; }
Property Value
Type Description
PanelLayout
Remarks

The value must be an instance of PanelLayout. The only predefined values are:

The default value is PanelLayoutPosition.

You must not modify this property once the Panel has been measured or the Panel has been added to another Panel.

ViewboxStretch

For Viewbox Panels: Gets or sets how the panel will resize its content.

Declaration
public ViewboxStretch ViewboxStretch { get; set; }
Property Value
Type Description
ViewboxStretch
Remarks

Possible values are Uniform and UniformToFill. The default is Uniform.

Methods

Add(params ColumnDefinition[])

Adds a number of ColumnDefinitions to this Table panel.

Declaration
public Panel Add(params ColumnDefinition[] cols)
Parameters
Type Name Description
ColumnDefinition[] cols

A number of ColumnDefinitions.

Returns
Type Description
Panel

this Panel

Remarks

This method will throw an error if used on a Panel that isn't of Type PanelLayoutTable. If the column already exists in the Table Panel, this method will modify the existing column.

Add(params GraphObject[])

Adds a number of GraphObjects to the end of this Panel's list of elements, visually in front of all of the other elements.

Declaration
public Panel Add(params GraphObject[] elements)
Parameters
Type Name Description
GraphObject[] elements

A variable number of GraphObject parameters.

Returns
Type Description
Panel

this Panel

Remarks

If an element to be added is already in this Panel's list of elements, the object is moved to the end of the list. You cannot add a GraphObject to a Panel if that GraphObject is already in a different Panel.

Add(params RowDefinition[])

Adds a number of RowDefinitions to this Table panel.

Declaration
public Panel Add(params RowDefinition[] rows)
Parameters
Type Name Description
RowDefinition[] rows

A number of RowDefinitions.

Returns
Type Description
Panel

this Panel

Remarks

This method will throw an error if used on a Panel that isn't of Type PanelLayoutTable. If the row already exists in the Table Panel, this method will modify the existing row.

Add(IEnumerable<GraphObject>)

Adds a number of GraphObjects to the end of this Panel's list of elements, visually in front of all of the other elements.

Declaration
public Panel Add(IEnumerable<GraphObject> elements)
Parameters
Type Name Description
IEnumerable<GraphObject> elements

An enumerable of GraphObjects.

Returns
Type Description
Panel

this Panel

Remarks

If an element to be added is already in this Panel's list of elements, the object is moved to the end of the list. You cannot add a GraphObject to a Panel if that GraphObject is already in a different Panel.

Copy()

Creates a deep copy of this Panel and returns it.

Declaration
public override GraphObject Copy()
Returns
Type Description
GraphObject
Overrides

CopyTemplate(bool)

Make a deep copy of this Panel and allow it to be used as a template.

Declaration
public Panel CopyTemplate(bool freeze = false)
Parameters
Type Name Description
bool freeze

whether to freeze the Bindings in the copy; default is false

Returns
Type Description
Panel
Remarks

This makes copies of Bindings, unlike the regular Copy() method. Pass true as the argument in order to freeze the Bindings, allowing it to operate efficiently as a template. A false value (which is the default) allows further additions/modifications of the bindings in the copied panel.

Elt(int)

Returns the GraphObject in this Panel's list of elements at the specified index.

Declaration
public GraphObject Elt(int idx)
Parameters
Type Name Description
int idx
Returns
Type Description
GraphObject

FindColumnForLocalX(double)

For Table Panels: Returns the cell at a given x-coordinate in local coordinates, or -1 if there are no ColumnDefinitions for this Table Panel or if the argument is negative.

Declaration
public int FindColumnForLocalX(double x)
Parameters
Type Name Description
double x
Returns
Type Description
int

a zero-based integer

Remarks

Call GetLocalPoint(Point) to convert a Point in document coordinates into a Point in local coordinates.

See Also

FindElement(string)

Search the visual tree starting at this Panel for a GraphObject whose Name is the given name.

Declaration
public virtual GraphObject FindElement(string name)
Parameters
Type Name Description
string name

The name to search for, using a case-sensitive string comparison.

Returns
Type Description
GraphObject

If no such named element can be found, this returns null.

Remarks

This does not recurse into the elements inside a Panel that holds elements for an ItemList.

FindItemPanelForData(object)

Return the Panel that was made for a particular data object in this panel's ItemList.

Declaration
public Panel FindItemPanelForData(object data)
Parameters
Type Name Description
object data

must be an Object, not a string or a number or a bool or a function

Returns
Type Description
Panel

null if not found

Remarks

If this returns a Panel, its Data property will be the argument data object, and its containing Panel will be this panel.

FindMainElement()

Return an immediate child element whose IsPanelMain is true, or else just return the first child element.

Declaration
public GraphObject FindMainElement()
Returns
Type Description
GraphObject

this may return null if there are no child elements

FindRowForLocalY(double)

For Table Panels: Returns the row at a given y-coordinate in local coordinates, or -1 if there are no RowDefinitions for this Table Panel or if the argument is negative.

Declaration
public int FindRowForLocalY(double y)
Parameters
Type Name Description
double y
Returns
Type Description
int

a zero-based integer

Remarks

Call GetLocalPoint(Point) to convert a Point in document coordinates into a Point in local coordinates.

See Also

GetColumnDefinition(int)

For Table Panels: Gets the ColumnDefinition for a particular column.

Declaration
public virtual ColumnDefinition GetColumnDefinition(int idx)
Parameters
Type Name Description
int idx

the non-negative zero-based integer column index.

Returns
Type Description
ColumnDefinition
Remarks

If you ask for the definition of a column at or beyond the ColumnCount, it will automatically create one and return it.

If this Panel is not a Table Panel, this method returns null.

GetRowDefinition(int)

For Table Panels: Gets the RowDefinition for a particular row.

Declaration
public virtual RowDefinition GetRowDefinition(int idx)
Parameters
Type Name Description
int idx

the non-negative zero-based integer row index.

Returns
Type Description
RowDefinition
Remarks

If you ask for the definition of a row at or beyond the RowCount, it will automatically create one and return it.

If this Panel is not a Table Panel, this method returns null.

GraduatedPointForValue(double)

For Graduated Panels: Returns the point that corresponds with a value, in the panel's coordinates.

Declaration
public Point GraduatedPointForValue(double val)
Parameters
Type Name Description
double val

a value between GraduatedMin and GraduatedMax

Returns
Type Description
Point
Remarks

If the value provided is not within the GraduatedMin and GraduatedMax, it will be constrained to within those values.

If this Panel is not a Graduated Panel, this method returns Point(double.NaN, double.NaN).

See Also

GraduatedValueForPoint(Point)

For Graduated Panels: Returns the value that corresponds with the given Point.

Declaration
public double GraduatedValueForPoint(Point pt)
Parameters
Type Name Description
Point pt

a Point in the Graduated Panel's coordinates

Returns
Type Description
double
Remarks

The Point must be in the panel's coordinates. The value returned will be in the Graduated Panel's range.

If this Panel is not a Graduated Panel, this method returns double.NaN.

See Also

InsertAt(int, GraphObject)

Adds a GraphObject to the Panel's list of elements at the specified index.

Declaration
public void InsertAt(int index, GraphObject element)
Parameters
Type Name Description
int index
GraphObject element

A GraphObject.

Remarks

If the element to be added is already in this Panel's list of elements, the element is moved to the specified index. You cannot add a GraphObject to a Panel that if that GraphObject is already in a different Panel.

RebuildItemElements()

Create and add new GraphObjects corresponding to and bound to the data in the ItemList, after removing all existing elements from this Panel.

Declaration
public void RebuildItemElements()
Remarks

This method is automatically called when replacing the ItemList value, or when changing the value of ItemTemplate or ItemTemplateMap.

This uses ItemCategoryProperty to determine the category for an item data. That string is used to look up a template in ItemTemplateMap. The resulting template (which is also a Panel) is copied, added to this panel, and its ItemIndex is set to its index in that list. That new child Panel is then data-bound to that list item by setting its Data.

If ItemList is null, this method just removes all elements from this panel. Actually, if this Panel Type is "Spot", "Auto", or "Link", the very first element is always kept by this method. Also, if this Panel type is "Table", and if the first element is a "TableRow" or "TableColumn" Panel whose IsPanelMain property is set to true, that first element will be kept too. That is useful for defining literal TableRow headers in Table panels, when the header information is not kept as the first item in the ItemList.

It is wasteful to call this method after making some model data changes. It is better to call Set(object, string, object), AddListItem(IList, object), InsertListItem(IList, int, object), or RemoveListItem(IList, int), or other model methods. Not only do those methods update efficiently, they also preserve unbound state and support undo/redo.

Remove(GraphObject)

Removes a GraphObject from this Panel's list of elements.

Declaration
public void Remove(GraphObject element)
Parameters
Type Name Description
GraphObject element

A GraphObject.

RemoveAt(int)

Removes an GraphObject from this Panel's list of elements at the specified index.

Declaration
public void RemoveAt(int idx)
Parameters
Type Name Description
int idx

RemoveColumnDefinition(int)

For Table Panels: Removes the ColumnDefinition for a particular column.

Declaration
public void RemoveColumnDefinition(int idx)
Parameters
Type Name Description
int idx

the non-negative zero-based integer row index.

Remarks

If this Panel is not a Table Panel, this method does nothing.

RemoveRowDefinition(int)

For Table Panels: Removes the RowDefinition for a particular row.

Declaration
public void RemoveRowDefinition(int idx)
Parameters
Type Name Description
int idx

the non-negative zero-based integer row index.

Remarks

If this Panel is not a Table Panel, this method does nothing.

UpdateTargetBindings(string)

Re-evaluate all data bindings on this panel, in order to assign new property values to the GraphObjects in this visual tree based on this object's Data property values.

Declaration
public virtual void UpdateTargetBindings(string srcprop = "")
Parameters
Type Name Description
string srcprop

An optional source data property name: when provided, only evaluates those Bindings that use that particular property; when not provided or when it is the empty string, all bindings are evaluated.

Remarks

It is better to call Set(object, string, object) to modify data properties, because that will both record changes for undo/redo and will update all bindings that may depend on that property.

This method does nothing if Data is null.

See Also

Implements