Visual State Manager
Similar to other API's the VisualStateManager
provides a fluent Builder API to help adding one or more groups, each with one or more states. In its simplest form, adding a group with a single state like this:
new Grid()
.VisualStateManager(vsm => vsm
.Group(group => group
.State("SomeState", state => state
.Setters(grid => grid.Background(StaticResource.Get<Brush>("SomeResource"))))))
Updating Children
When updating the children of a given control, it is important to ensure that these children exist in scope. You can provide a reference to a given control instance for the Setters
to update those specific to the current instance.
new Grid()
.Children(
new TextBlock().Name(out var textBlock)
)
.VisualStateManager(vsm => vsm
.Group(group => group
.State("SomeState", state => state
.Setters(grid => grid.Background(StaticResource.Get<Brush>("SomeResource")))
.Setters(textBlock, tb => tb.Text("You are in Some State")))));
Using Triggers
In addition to adding various style setters to a given state, it is also possible to add one or more Triggers
to a Visual State.
new Grid()
.Children(
new TextBlock().Name(out var textBlock)
)
.VisualStateManager(vsm => vsm
.Group(group => group
.State("SomeState", state => state
.StateTriggers(
new AdaptiveTrigger()
.MinWindowWidth(StaticResource.Get<double>("WideMinWindowWidth"))
))));
Important
When you use StateTriggers
, ensure that the VisualStateGroup
is declared under the first child of the root of a templated control in order for the triggers to take effect automatically. See WinUI documentation for more information.