LayoutAnimation Constructor uno
Creates a new LayoutAnimation
Triggers when the layout of an element changes
When an Element has certain properties like Width, Height or Margin
(collectively reffered to as "layout properties") changed or when its
location in the visual tree changes, we can trigger a LayoutAnimation
.
Calculating layout for a large UX-document can be quite costly. When animating layout properties with Change animators, we run the risk of forcing a new layout to be calculated each frame. This can very easily lead to frame drops.
The LayoutAnimation
trigger can be used to make this more pleasant.
For example, instead of animating the Width of an Element using Change,
we can use Set and react to this change using a LayoutAnimation. Inside
LayoutAnimation we specify how our element should move/resize from its
previous position to its new position.
This example shows three rectangles, a teal, a red and a blue one. If the red or blue rectangle is clucked, the Width and Alignment properties of the teal rectangle gets smoothly animated.
<StackPanel>
<Rectangle ux:Name="panel" Width="100" Height="100" CornerRadius="5" Color="Teal" Alignment="Center">
<LayoutAnimation>
<Resize X="1" Y="1" RelativeTo="SizeChange" Duration="0.25"/>
<Move X="1" Y="1" RelativeTo="PositionChange" Duration="0.25"/>
</LayoutAnimation>
</Rectangle>
<Rectangle Color="Red" CornerRadius="5" Width="100" Height="50">
<Clicked>
<Set panel.Alignment="Left"/>
<Set panel.Width="200"/>
</Clicked>
</Rectangle>
<Rectangle Color="Blue" CornerRadius="5" Width="100" Height="50">
<Clicked>
<Set panel.Alignment="Right"/>
<Set panel.Width="50"/>
</Clicked>
</Rectangle>
</StackPanel>
Creates a new LayoutAnimation
A list of actions that execute with the trigger. These may react on simple direction changes, or at specific time offsets.
If there is a transition between forward/backward playback and two timeilnes are being used (implicit or explicit) this specifies the cross-fade time.
true
if there is an explicit backward animation.
Play the trigger from where it currently is to the end.
Indicates the trigger is bound to the layout of a visual. This will keep the trigger in Bypass mode until after the first layout of the element is obtained. This is required since layout does not happen in the same root grouping/update phase as the creation of the element, yet not having a layout should qualify as part of the rooting period.
Stretches the duration of the animation to fill up this period of time.
Specifies a multiplier to the elapsed time for animation playback.
Nodes to add to the Parent when this trigger is any non-deactivated state (Progress > 0)
The list of bindings belonging to this node.
The context parent is the semantic parent of this node. It is where non-UI structure should be resolved, like looking for the DataContext, a Navigation, or other semantic item.
Finds the first node with a given name that satisfies the given acceptor. The serach algorithm works as follows: Nodes in the subtree are matched first, then it matches the nodes in the subtrees ofthe ancestor nodes by turn all the way to the root. If no matching node is found, the function returns null.
Whether rooting for this node is completed. Returns false if unrooting has started.
Whether rooting of this node has started. Note that even if this property returns true, rooting may not yet be completed for the node. See also IsRootingCompleted.
Run-time name of the node. This property is automatically set using the ux:Name attribute.
Returns the next sibling node of the given type.
If you override OnRooted
you must call base.OnRooted()
first in your derived class. No other processing should happen first, otherwise you might end up in an undefined state.
The parent Visual of this node. Will return null if the node is not rooted.
Returns the next sibling node of the given type.
A linked list holding data for extrinsic properties.
hide
hide
Interface for objects that can have a script engine representation
hide