Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Manipulation.cs / 1305600 / Manipulation.cs
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
using System.Windows.Input.Manipulations;
using MS.Internal.PresentationCore;
namespace System.Windows.Input
{
///
/// Provides access to various features and settings of manipulation.
///
public static class Manipulation
{
internal static readonly RoutedEvent ManipulationStartingEvent = EventManager.RegisterRoutedEvent("ManipulationStarting", RoutingStrategy.Bubble, typeof(EventHandler), typeof(ManipulationDevice));
internal static readonly RoutedEvent ManipulationStartedEvent = EventManager.RegisterRoutedEvent("ManipulationStarted", RoutingStrategy.Bubble, typeof(EventHandler), typeof(ManipulationDevice));
internal static readonly RoutedEvent ManipulationDeltaEvent = EventManager.RegisterRoutedEvent("ManipulationDelta", RoutingStrategy.Bubble, typeof(EventHandler), typeof(ManipulationDevice));
internal static readonly RoutedEvent ManipulationInertiaStartingEvent = EventManager.RegisterRoutedEvent("ManipulationInertiaStarting", RoutingStrategy.Bubble, typeof(EventHandler), typeof(ManipulationDevice));
internal static readonly RoutedEvent ManipulationBoundaryFeedbackEvent = EventManager.RegisterRoutedEvent("ManipulationBoundaryFeedback", RoutingStrategy.Bubble, typeof(EventHandler), typeof(ManipulationDevice));
internal static readonly RoutedEvent ManipulationCompletedEvent = EventManager.RegisterRoutedEvent("ManipulationCompleted", RoutingStrategy.Bubble, typeof(EventHandler), typeof(ManipulationDevice));
///
/// Determines if a manipulation is currently active on an element.
///
/// Specifies the element that may or may not have a manipulation.
/// True if there is an active manipulation, false otherwise.
public static bool IsManipulationActive(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
return GetActiveManipulationDevice(element) != null;
}
private static ManipulationDevice GetActiveManipulationDevice(UIElement element)
{
Debug.Assert(element != null, "element should be non-null.");
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if ((device != null) && device.IsManipulationActive)
{
return device;
}
return null;
}
///
/// If a manipulation is active, forces the manipulation to proceed to the inertia phase.
/// If inertia is already occurring, it will restart inertia.
///
/// The element on which there is an active manipulation.
public static void StartInertia(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if (device != null)
{
device.CompleteManipulation(/* withInertia = */ true);
}
}
///
/// If a manipulation is active, forces the manipulation to complete.
///
/// The element on which there is an active manipulation.
public static void CompleteManipulation(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
if (!TryCompleteManipulation(element))
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotActive));
}
}
internal static bool TryCompleteManipulation(UIElement element)
{
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if (device != null)
{
device.CompleteManipulation(/* withInertia = */ false);
return true;
}
return false;
}
///
/// Changes the manipulation mode of an active manipulation.
///
/// The element on which there is an active manipulation.
/// The new manipulation mode.
public static void SetManipulationMode(UIElement element, ManipulationModes mode)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = GetActiveManipulationDevice(element);
if (device != null)
{
device.ManipulationMode = mode;
}
else
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotActive));
}
}
///
/// Retrieves the current manipulation mode of an active manipulation.
///
/// The element on which there is an active manipulation.
/// The current manipulation mode.
public static ManipulationModes GetManipulationMode(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if (device != null)
{
return device.ManipulationMode;
}
else
{
return ManipulationModes.None;
}
}
///
/// Changes the container that defines the coordinate space of event data
/// for an active manipulation.
///
/// The element on which there is an active manipulation.
/// The container that defines the coordinate space.
public static void SetManipulationContainer(UIElement element, IInputElement container)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = GetActiveManipulationDevice(element);
if (device != null)
{
device.ManipulationContainer = container;
}
else
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotActive));
}
}
///
/// Retrieves the container that defines the coordinate space of event data
/// for an active manipulation.
///
/// The element on which there is an active manipulation.
/// The container that defines the coordinate space.
public static IInputElement GetManipulationContainer(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if (device != null)
{
return device.ManipulationContainer;
}
return null;
}
///
/// Changes the pivot for single-finger manipulation on an active manipulation.
///
/// The element on which there is an active manipulation.
/// The new pivot for single-finger manipulation.
public static void SetManipulationPivot(UIElement element, ManipulationPivot pivot)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = GetActiveManipulationDevice(element);
if (device != null)
{
device.ManipulationPivot = pivot;
}
else
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotActive));
}
}
///
/// Retrieves the pivot for single-finger manipulation on an active manipulation.
///
/// The element on which there is an active manipulation.
/// The pivot for single-finger manipulation.
public static ManipulationPivot GetManipulationPivot(UIElement element)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if (device != null)
{
return device.ManipulationPivot;
}
return null;
}
///
/// Associates a manipulator with a UIElement. This will either will start an
/// active manipulation or add to an existing one.
///
/// The element with which to associate the manipulator.
/// The manipulator, such as a TouchDevice.
public static void AddManipulator(UIElement element, IManipulator manipulator)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
if (manipulator == null)
{
throw new ArgumentNullException("manipulator");
}
if (!element.IsManipulationEnabled)
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotEnabled));
}
ManipulationDevice device = ManipulationDevice.AddManipulationDevice(element);
device.AddManipulator(manipulator);
}
///
/// Disassociates a manipulator with a UIElement. This will remove it from
/// an active manipulation, possibly completing it.
///
/// The element that the manipulator used to be associated with.
/// The manipulator, such as a TouchDevice.
public static void RemoveManipulator(UIElement element, IManipulator manipulator)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
if (manipulator == null)
{
throw new ArgumentNullException("manipulator");
}
if (!TryRemoveManipulator(element, manipulator))
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotActive));
}
}
internal static bool TryRemoveManipulator(UIElement element, IManipulator manipulator)
{
ManipulationDevice device = ManipulationDevice.GetManipulationDevice(element);
if (device != null)
{
device.RemoveManipulator(manipulator);
return true;
}
return false;
}
///
/// Adds a ManipulationParameters2D object to an active manipulation.
///
/// The element on which there is an active manipulation.
/// The parameter.
[Browsable(false)]
public static void SetManipulationParameter(UIElement element, ManipulationParameters2D parameter)
{
if (element == null)
{
throw new ArgumentNullException("element");
}
if (parameter == null)
{
throw new ArgumentNullException("parameter");
}
ManipulationDevice device = GetActiveManipulationDevice(element);
if (device != null)
{
device.SetManipulationParameters(parameter);
}
else
{
throw new InvalidOperationException(SR.Get(SRID.Manipulation_ManipulationNotActive));
}
}
///
/// Searches from the specified visual (inclusively) up the visual tree
/// for a UIElement that has a ManipulationMode that desires manipulation events.
///
///
/// The starting element. Usually, this is an element that an input device has hit-tested to.
///
///
/// A UIElement that has ManipulationMode set to Translate, Scale, Rotate, or some combination of the three.
/// If no element is found, then null is returned.
///
///
/// This function reads data that is thread-bound and should be
/// called on the same thread that 'visual' is bound to.
///
internal static UIElement FindManipulationParent(Visual visual)
{
while (visual != null)
{
UIElement element = visual as UIElement;
if ((element != null) && element.IsManipulationEnabled)
{
return element;
}
else
{
visual = VisualTreeHelper.GetParent(visual) as Visual;
}
}
return null;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Span.cs
- PtsContext.cs
- Assembly.cs
- TypeInfo.cs
- XmlDataSourceNodeDescriptor.cs
- ProcessManager.cs
- Menu.cs
- DataGridCheckBoxColumn.cs
- OverflowException.cs
- FixedSOMGroup.cs
- TransformPatternIdentifiers.cs
- ListItemCollection.cs
- Int32.cs
- ScrollBarRenderer.cs
- HtmlShimManager.cs
- IndexedGlyphRun.cs
- HtmlControlDesigner.cs
- HitTestParameters.cs
- AccessText.cs
- ActivityBindForm.Designer.cs
- JsonUriDataContract.cs
- SqlFunctionAttribute.cs
- PermissionSet.cs
- GeneralTransformGroup.cs
- EntityContainerEntitySet.cs
- PrtCap_Base.cs
- WindowsPrincipal.cs
- PropertyBuilder.cs
- exports.cs
- PageBuildProvider.cs
- Internal.cs
- ClientType.cs
- WebPartDisplayModeEventArgs.cs
- UnsafeNativeMethodsPenimc.cs
- FlowchartStart.xaml.cs
- XsdValidatingReader.cs
- ControlValuePropertyAttribute.cs
- CheckedPointers.cs
- WorkflowMarkupElementEventArgs.cs
- IOThreadScheduler.cs
- Marshal.cs
- SpellerInterop.cs
- StringCollection.cs
- CngAlgorithmGroup.cs
- Propagator.JoinPropagator.cs
- FrameworkTextComposition.cs
- TrustManagerPromptUI.cs
- ResourcePool.cs
- LinearGradientBrush.cs
- FixedTextContainer.cs
- CodeSnippetExpression.cs
- UnsafeNetInfoNativeMethods.cs
- odbcmetadatacollectionnames.cs
- ShapingEngine.cs
- AsymmetricCryptoHandle.cs
- AsymmetricAlgorithm.cs
- CompoundFileIOPermission.cs
- DataGridCellsPresenter.cs
- XmlTextReader.cs
- ContentType.cs
- ProjectionPath.cs
- HashMembershipCondition.cs
- StorageComplexTypeMapping.cs
- MgmtConfigurationRecord.cs
- NumberFunctions.cs
- ColorKeyFrameCollection.cs
- TypeConverterHelper.cs
- AssociationSet.cs
- PresentationSource.cs
- FormViewInsertEventArgs.cs
- HitTestResult.cs
- ListContractAdapter.cs
- RSAOAEPKeyExchangeFormatter.cs
- BitmapEffectInput.cs
- QEncodedStream.cs
- EventTrigger.cs
- TripleDESCryptoServiceProvider.cs
- XmlNodeReader.cs
- Misc.cs
- DecimalAverageAggregationOperator.cs
- RootNamespaceAttribute.cs
- BufferedStream.cs
- ImpersonationContext.cs
- PathNode.cs
- Point3DCollection.cs
- ThousandthOfEmRealPoints.cs
- TemplateBaseAction.cs
- CanonicalFontFamilyReference.cs
- CounterCreationDataCollection.cs
- StorageConditionPropertyMapping.cs
- ParagraphVisual.cs
- IPipelineRuntime.cs
- PointCollection.cs
- ClientScriptManagerWrapper.cs
- Visual3DCollection.cs
- DrawingAttributesDefaultValueFactory.cs
- ContentTextAutomationPeer.cs
- RNGCryptoServiceProvider.cs
- ColorAnimation.cs
- TreeView.cs