Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Command / MouseBinding.cs / 1305600 / MouseBinding.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: The MouseBinding class is used by the developer to create Mouse Input Bindings // // See spec at : http://avalon/coreui/Specs/Commanding(new).mht // //* MouseBinding class serves the purpose of Input Bindings for Mouse Device. // // History: // 06/01/2003 : chandras - Created // 05/01/2004 : chandras- changed to new design. //--------------------------------------------------------------------------- using System; using System.Windows.Input; using System.Windows; using System.Windows.Markup; using System.ComponentModel; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace System.Windows.Input { ////// MouseBinding - Implements InputBinding (generic InputGesture-Command map) /// MouseBinding acts like a map for MouseGesture and Commands. /// Most of the logic is in InputBinding and MouseGesture, this only /// facilitates user to specify MouseAction directly without going in /// MouseGesture path. Also it provides the MouseGestureTypeConverter /// on the Gesture property to have MouseGesture, like "RightClick" /// defined in Markup as Gesture="RightClick" working. /// public class MouseBinding : InputBinding { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors ////// constructor /// public MouseBinding() : base() { } ////// Constructor /// /// Command Associated /// Mouse Action internal MouseBinding(ICommand command, MouseAction mouseAction) : this(command, new MouseGesture(mouseAction)) { } ////// Constructor /// /// Command Associated /// Mmouse Gesture associated public MouseBinding(ICommand command, MouseGesture gesture) : base(command, gesture) { SynchronizePropertiesFromGesture(gesture); // Hooking the handler explicitly becuase base constructor uses _gesture // It cannot use Gesture property itself because it is a virtual gesture.PropertyChanged += new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } #endregion Constructors //------------------------------------------------------ // // Properties // //----------------------------------------------------- #region Properties ////// MouseGesture /// [TypeConverter(typeof(MouseGestureConverter))] [ValueSerializer(typeof(MouseGestureValueSerializer))] public override InputGesture Gesture { get { return base.Gesture as MouseGesture; } set { MouseGesture oldMouseGesture = Gesture as MouseGesture; MouseGesture mouseGesture = value as MouseGesture; if (mouseGesture != null) { base.Gesture = mouseGesture; SynchronizePropertiesFromGesture(mouseGesture); if (oldMouseGesture != mouseGesture) { if (oldMouseGesture != null) { oldMouseGesture.PropertyChanged -= new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } mouseGesture.PropertyChanged += new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } } else { throw new ArgumentException(SR.Get(SRID.InputBinding_ExpectedInputGesture, typeof(MouseGesture))); } } } ////// Dependency property for MouseAction /// public static readonly DependencyProperty MouseActionProperty = DependencyProperty.Register("MouseAction", typeof(MouseAction), typeof(MouseBinding), new UIPropertyMetadata(MouseAction.None, new PropertyChangedCallback(OnMouseActionPropertyChanged))); ////// MouseAction /// public MouseAction MouseAction { get { return (MouseAction)GetValue(MouseActionProperty); } set { SetValue(MouseActionProperty, value); } } private static void OnMouseActionPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MouseBinding mouseBinding = (MouseBinding)d; mouseBinding.SynchronizeGestureFromProperties((MouseAction)(e.NewValue)); } #endregion #region Freezable protected override Freezable CreateInstanceCore() { return new MouseBinding(); } protected override void CloneCore(Freezable sourceFreezable) { base.CloneCore(sourceFreezable); CloneGesture(); } protected override void CloneCurrentValueCore(Freezable sourceFreezable) { base.CloneCurrentValueCore(sourceFreezable); CloneGesture(); } protected override void GetAsFrozenCore(Freezable sourceFreezable) { base.GetAsFrozenCore(sourceFreezable); CloneGesture(); } protected override void GetCurrentValueAsFrozenCore(Freezable sourceFreezable) { base.GetCurrentValueAsFrozenCore(sourceFreezable); CloneGesture(); } #endregion #region Private Methods ////// Synchronized Properties from Gesture /// private void SynchronizePropertiesFromGesture(MouseGesture mouseGesture) { if (!_settingGesture) { _settingGesture = true; try { MouseAction = mouseGesture.MouseAction; } finally { _settingGesture = false; } } } ////// Synchronized Gesture from properties /// private void SynchronizeGestureFromProperties(MouseAction mouseAction) { if (!_settingGesture) { _settingGesture = true; try { if (Gesture == null) { Gesture = new MouseGesture(mouseAction); } else { ((MouseGesture)Gesture).MouseAction = mouseAction; } } finally { _settingGesture = false; } } } private void OnMouseGesturePropertyChanged(object sender, PropertyChangedEventArgs e) { if (string.Compare(e.PropertyName, "MouseAction", StringComparison.Ordinal) == 0) { MouseGesture mouseGesture = Gesture as MouseGesture; if (mouseGesture != null) { SynchronizePropertiesFromGesture(mouseGesture); } } } private void CloneGesture() { MouseGesture mouseGesture = Gesture as MouseGesture; if (mouseGesture != null) { mouseGesture.PropertyChanged += new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } } #endregion //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Data private bool _settingGesture = false; #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: The MouseBinding class is used by the developer to create Mouse Input Bindings // // See spec at : http://avalon/coreui/Specs/Commanding(new).mht // //* MouseBinding class serves the purpose of Input Bindings for Mouse Device. // // History: // 06/01/2003 : chandras - Created // 05/01/2004 : chandras- changed to new design. //--------------------------------------------------------------------------- using System; using System.Windows.Input; using System.Windows; using System.Windows.Markup; using System.ComponentModel; using SR=MS.Internal.PresentationCore.SR; using SRID=MS.Internal.PresentationCore.SRID; namespace System.Windows.Input { ////// MouseBinding - Implements InputBinding (generic InputGesture-Command map) /// MouseBinding acts like a map for MouseGesture and Commands. /// Most of the logic is in InputBinding and MouseGesture, this only /// facilitates user to specify MouseAction directly without going in /// MouseGesture path. Also it provides the MouseGestureTypeConverter /// on the Gesture property to have MouseGesture, like "RightClick" /// defined in Markup as Gesture="RightClick" working. /// public class MouseBinding : InputBinding { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors ////// constructor /// public MouseBinding() : base() { } ////// Constructor /// /// Command Associated /// Mouse Action internal MouseBinding(ICommand command, MouseAction mouseAction) : this(command, new MouseGesture(mouseAction)) { } ////// Constructor /// /// Command Associated /// Mmouse Gesture associated public MouseBinding(ICommand command, MouseGesture gesture) : base(command, gesture) { SynchronizePropertiesFromGesture(gesture); // Hooking the handler explicitly becuase base constructor uses _gesture // It cannot use Gesture property itself because it is a virtual gesture.PropertyChanged += new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } #endregion Constructors //------------------------------------------------------ // // Properties // //----------------------------------------------------- #region Properties ////// MouseGesture /// [TypeConverter(typeof(MouseGestureConverter))] [ValueSerializer(typeof(MouseGestureValueSerializer))] public override InputGesture Gesture { get { return base.Gesture as MouseGesture; } set { MouseGesture oldMouseGesture = Gesture as MouseGesture; MouseGesture mouseGesture = value as MouseGesture; if (mouseGesture != null) { base.Gesture = mouseGesture; SynchronizePropertiesFromGesture(mouseGesture); if (oldMouseGesture != mouseGesture) { if (oldMouseGesture != null) { oldMouseGesture.PropertyChanged -= new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } mouseGesture.PropertyChanged += new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } } else { throw new ArgumentException(SR.Get(SRID.InputBinding_ExpectedInputGesture, typeof(MouseGesture))); } } } ////// Dependency property for MouseAction /// public static readonly DependencyProperty MouseActionProperty = DependencyProperty.Register("MouseAction", typeof(MouseAction), typeof(MouseBinding), new UIPropertyMetadata(MouseAction.None, new PropertyChangedCallback(OnMouseActionPropertyChanged))); ////// MouseAction /// public MouseAction MouseAction { get { return (MouseAction)GetValue(MouseActionProperty); } set { SetValue(MouseActionProperty, value); } } private static void OnMouseActionPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MouseBinding mouseBinding = (MouseBinding)d; mouseBinding.SynchronizeGestureFromProperties((MouseAction)(e.NewValue)); } #endregion #region Freezable protected override Freezable CreateInstanceCore() { return new MouseBinding(); } protected override void CloneCore(Freezable sourceFreezable) { base.CloneCore(sourceFreezable); CloneGesture(); } protected override void CloneCurrentValueCore(Freezable sourceFreezable) { base.CloneCurrentValueCore(sourceFreezable); CloneGesture(); } protected override void GetAsFrozenCore(Freezable sourceFreezable) { base.GetAsFrozenCore(sourceFreezable); CloneGesture(); } protected override void GetCurrentValueAsFrozenCore(Freezable sourceFreezable) { base.GetCurrentValueAsFrozenCore(sourceFreezable); CloneGesture(); } #endregion #region Private Methods ////// Synchronized Properties from Gesture /// private void SynchronizePropertiesFromGesture(MouseGesture mouseGesture) { if (!_settingGesture) { _settingGesture = true; try { MouseAction = mouseGesture.MouseAction; } finally { _settingGesture = false; } } } ////// Synchronized Gesture from properties /// private void SynchronizeGestureFromProperties(MouseAction mouseAction) { if (!_settingGesture) { _settingGesture = true; try { if (Gesture == null) { Gesture = new MouseGesture(mouseAction); } else { ((MouseGesture)Gesture).MouseAction = mouseAction; } } finally { _settingGesture = false; } } } private void OnMouseGesturePropertyChanged(object sender, PropertyChangedEventArgs e) { if (string.Compare(e.PropertyName, "MouseAction", StringComparison.Ordinal) == 0) { MouseGesture mouseGesture = Gesture as MouseGesture; if (mouseGesture != null) { SynchronizePropertiesFromGesture(mouseGesture); } } } private void CloneGesture() { MouseGesture mouseGesture = Gesture as MouseGesture; if (mouseGesture != null) { mouseGesture.PropertyChanged += new PropertyChangedEventHandler(OnMouseGesturePropertyChanged); } } #endregion //------------------------------------------------------ // // Private Fields // //------------------------------------------------------ #region Data private bool _settingGesture = false; #endregion } } // 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
- SynchronousChannelMergeEnumerator.cs
- WebPartDisplayModeEventArgs.cs
- PtsCache.cs
- ServiceMetadataBehavior.cs
- DataGridRowsPresenter.cs
- LayoutInformation.cs
- BoundPropertyEntry.cs
- glyphs.cs
- ImplicitInputBrush.cs
- ResolveDuplexCD1AsyncResult.cs
- RadioButtonPopupAdapter.cs
- BufferedGraphicsContext.cs
- ProcessInfo.cs
- GenericXmlSecurityTokenAuthenticator.cs
- TextRangeEditTables.cs
- SetUserPreferenceRequest.cs
- MessageEventSubscriptionService.cs
- ConstraintConverter.cs
- NativeMethods.cs
- ProcessRequestArgs.cs
- WorkflowApplicationIdleEventArgs.cs
- TextParagraphProperties.cs
- ReadOnlyCollectionBuilder.cs
- CodeTypeDeclaration.cs
- FileDialog_Vista.cs
- RestHandlerFactory.cs
- DoubleAnimationBase.cs
- PageBreakRecord.cs
- PointF.cs
- ServiceModelActivationSectionGroup.cs
- CommunicationObjectAbortedException.cs
- TextLineBreak.cs
- FontUnitConverter.cs
- CultureSpecificStringDictionary.cs
- RetriableClipboard.cs
- CompositeKey.cs
- GridViewItemAutomationPeer.cs
- ImageConverter.cs
- RTLAwareMessageBox.cs
- EpmCustomContentWriterNodeData.cs
- XPathException.cs
- Helper.cs
- SwitchAttribute.cs
- FrugalList.cs
- LineSegment.cs
- PeerChannelFactory.cs
- DbProviderManifest.cs
- CodeMemberField.cs
- RowUpdatedEventArgs.cs
- StreamWriter.cs
- RuleSetDialog.cs
- KeyFrames.cs
- CalendarDesigner.cs
- Int64Animation.cs
- Metadata.cs
- BaseAutoFormat.cs
- COAUTHINFO.cs
- SafeMILHandle.cs
- SmtpDigestAuthenticationModule.cs
- SizeChangedInfo.cs
- DSACryptoServiceProvider.cs
- IdleTimeoutMonitor.cs
- NegotiateStream.cs
- ContentPropertyAttribute.cs
- RoutedPropertyChangedEventArgs.cs
- XmlSchemas.cs
- RecipientInfo.cs
- SQLGuidStorage.cs
- PropertyMapper.cs
- EpmSyndicationContentSerializer.cs
- NavigationExpr.cs
- HwndSource.cs
- TemplateBindingExpression.cs
- TimeSpanMinutesConverter.cs
- ProvidersHelper.cs
- UnmanagedMemoryStreamWrapper.cs
- IntSecurity.cs
- AspNetHostingPermission.cs
- ComponentConverter.cs
- FtpWebResponse.cs
- InputLanguageCollection.cs
- Util.cs
- cookiecontainer.cs
- XmlObjectSerializerWriteContextComplex.cs
- Source.cs
- Rect.cs
- StorageMappingItemCollection.cs
- ValueSerializerAttribute.cs
- XmlSchemaSubstitutionGroup.cs
- CodeTypeConstructor.cs
- HitTestWithPointDrawingContextWalker.cs
- UnsafeNativeMethodsCLR.cs
- XmlSerializationWriter.cs
- StubHelpers.cs
- ping.cs
- CustomCategoryAttribute.cs
- RegionData.cs
- EntitySqlQueryBuilder.cs
- PtsHelper.cs
- JsonFormatGeneratorStatics.cs