Manages states and the logic for transitioning between states for controls.
Namespace:
System.Windows
Assembly:
System.Windows (in System.Windows.dll)
Visual Basic (Declaration)
Public Class VisualStateManager _
Inherits DependencyObject
Dim instance As VisualStateManager
public class VisualStateManager : DependencyObject
XAML Object Element Usage
<templateRoot>
<VisualStateManager.VisualStateGroups>
oneOrMoreVisualStateGroups
</VisualStateManager.VisualStateGroups>
</templateRoot>
XAML Values
- templateRoot
The root UIElement of content for a template applied to a control.
- oneOrMoreVisualStateGroups
One or more object elements that are of type VisualStateGroup.
Template authors add VisualStateGroup objects the VisualStateManager.VisualStateGroups attached property to represent states of a control and Control authors transition between states by calling the GoToState method.
If you want to implement your own logic for transitioning between states, you must inherit from VisualStateManager, override the GoToStateCore method, and set the VisualStateManager..::.CustomVisualStateManager attached property on the control that uses the custom logic.
The VisualStateManager.VisualStateGroups Attached Property
The VisualStateManager.VisualStateGroups attached property contains VisualStateGroup objects. Each VisualStateGroup contains a collection of mutually exclusive VisualState objects. You set VisualStateManager.VisualStateGroups on the root element of a ControlTemplate. Setting VisualStateManager.VisualStateGroups is the usage shown as the XAML usage for this class.
The vsm Prefix
vsm is aprefix that maps to the System.Windows namespace and assembly. The vsm prefix is assigned by some tools and designer scenarios when producing the XAML for visual states in a template. For the prefix vsm, the mapping is declared as xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows".
The following example creates a simple ControlTemplate for a Button that contains one Grid. The example sets the VisualStateManager.VisualStateGroups property on the Grid. The VisualStateManager.VisualStateGroups contains one VisualStateGroup, called CommonStates, which defines the MouseOver and Normal VisualState objects. When the user puts the mouse over the Button, the Grid changes from green to red over one half second. When the user moves the mouse away from the button, the Grid immediately changes back to green.
Run this sample
<ControlTemplate TargetType="Button"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">
<Grid >
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="CommonStates">
<vsm:VisualStateGroup.Transitions>
<!--Take one half second to trasition to the MouseOver state.-->
<vsm:VisualTransition To="MouseOver"
GeneratedDuration="0:0:0.5"/>
</vsm:VisualStateGroup.Transitions>
<vsm:VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
mouse is over the button.-->
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
System..::.Object
System.Windows..::.DependencyObject
System.Windows..::.VisualStateManager
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.
Reference
Other Resources