Canvas Example
The most common use of the Canvas may be to display dialogs, see
Dialogs.
You also may want to use it as a way to manage any fixed layout of items at X-Y coordinates . . . or to enable drag-and-drop scenarios on a simulated desktop?
However, besides these more obvious examples, you could also use it in the small, as merely a way to offset labels or other Framework Elements, since you may hang labels outside of its boundary, over its edge. See pic above.
Here is the code for it. I happen to be nesting one StackPanel child inside an existing StackPanel parent using the
AddAnyIParent syntax. Then, inside of the lambda expression, I initialize the StackPanel with a Canvas as the Composite for any/all children created within that StackPanel:
.AddAnyIParent<StackPanel, StackPanel>(0, 7, myStkPanel =>
{
myStkPanel.Initialize(100, 200, ContainerType.Canvas, Orientation.Vertical);
//Set Default Colors
myStkPanel.SetCompositeCanvasSettings(100, 50, Brushes.Red, Brushes.Green);
myStkPanel.Background = Brushes.LightSlateGray;
myStkPanel.Opacity = .59;
myStkPanel.BeginSettings()
.SetTextColorForLabel(30, 35, Brushes.White)
.SetZIndex<Label, StackPanel>(10, 25, 2)
.SetFontOnLabel(10, 10, "Arial", 11, FontWeights.DemiBold, FontStyles.Normal)
.SetFontOnLabel(30, 10, "Arial", 11, FontWeights.DemiBold, FontStyles.Italic)
.SetFontOnLabel(10, 25, "Arial", 14, FontWeights.Bold, FontStyles.Normal)
.SetFontOnLabel(30, 35, "Arial", 14, FontWeights.Bold, FontStyles.Italic)
.EndSettings();
Border xty = myStkPanel.BeginComposite()
.AddLabel(10, 10, "This is a label on a Canvas #1:", Brushes.White)
.AddLabel(30, 10, "another label", Brushes.Plum)
.EndComposite<StackPanel, StackPanelArgs>(null);
//Override Default Colors
myStkPanel.GetContainerFromComposite<Canvas, StackPanel>(myStkPanel.GetCompositeFromParent(xty.GetKey())).SetBackgroundColor(Brushes.Khaki);
myStkPanel.GetContainerFromComposite<Canvas, StackPanel>(myStkPanel.GetCompositeFromParent(xty.GetKey())).SetMouseOverColor(Brushes.Green);
myStkPanel.BeginComposite()
.AddLabel(10, 25, "This is a label on a Canvas #2:", Brushes.White)
.AddLabel(30, 35, "yet another label", Brushes.Blue)
.EndComposite<StackPanel, StackPanelArgs>(null);
})
Note that I use the special method
SetCompositeCanvasSettings to define a default width, height, background color, and mouseover color, for any canvas composites added to the Parent StackPanel. I also show an example with the first child canvas of getting a handle to it and overriding these default colors.