Helper class for implementing circular RangeControls

Used to enable circual touch input on RangeControl. Typically used when implementing circular range pickers, like a clock timepicker or dials.

Example

Andgle-based circular range control

The following example shows a simple circular RangeControl implemented using CircularRangeBehavior, where a visual is rotated as the RangeControl is changed. The range is calculated from the angle between the mouse and the X-axis

<RangeControl Width="180" Height="180" Margin="2">
    <CircularRangeBehavior />
    <Panel ux:Name="thumb" Margin="4">
        <Rectangle Color="#fff" Alignment="Right" Height="18" Width="48" CornerRadius="4" />
    </Panel>
    <ProgressAnimation>
        <Rotate Target="thumb" Degrees="360" />
    </ProgressAnimation>
    <Circle Color="#aaa" />
</RangeControl>
Angle and radius based circular range control

When used with a RangeControl2D, you can get both the angle progress, and the radius progress. This effectively means that your range control allows the user to control two ranges at once.

<RangeControl2D Width="180" Height="180" Margin="2" ux:Name="rangeControl">
    <CircularRangeBehavior/>
    <Panel ux:Name="thumb" Margin="4">
        <Rectangle Color="#fff" Alignment="Right" Height="18" Width="48" CornerRadius="4" />
    </Panel>
    <RangeAnimation Minimum="0" Maximum="100" Value="{ReadProperty rangeControl.ValueX}">
        <Rotate Target="thumb" Degrees="360" />
    </RangeAnimation>
    <RangeAnimation Minimum="0" Maximum="100" Value="{ReadProperty rangeControl.ValueY}">
        <Change radiusCircle.Factor="1" />
    </RangeAnimation>
    <Circle Color="#0FF" Alignment="Center" Width="180" Height="180">
        <Scaling ux:Name="radiusCircle" Factor="0" />
    </Circle>
    <Circle Color="#aaa" />
</RangeControl2D>

Location

Namespace
Fuse.Gestures
Package
Fuse.Controls.Primitives 1.9.0

Interface of CircularRangeBehavior

Inherited from Node

ContextParent : Node uno

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.

FindNodeByName(Selector, Predicate<Node> (Node)) : Node uno

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.

IsRootingStarted : bool uno

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.

Name : Selector ux

Run-time name of the node. This property is automatically set using the ux:Name attribute.

OnRooted uno

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.

Inherited from PropertyObject

Inherited from object

Attached UX Attributes

GlobalKey (attached by Resource) : string ux

The ux:Global attribute creates a global resource that is accessible everywhere in UX markup.

Implemented Interfaces

IGesture uno

Feedback to the gesture about pointer events as well as priority feedback to the gesture handler.

IScriptObject uno

Interface for objects that can have a script engine representation