Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Command / KeyBinding.cs / 1305600 / KeyBinding.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
//
// Description: The KeyBinding class is used by the developer to create Keyboard Input Bindings
//
// See spec at : http://avalon/coreui/Specs/Commanding(new).mht
//
//* KeyBinding class serves the purpose of Input Bindings for Keyboard Device.
//
// History:
// 06/01/2003 : chandras - Created
// 05/01/2004 : chandra - changed to accommodate new design
// ( http://avalon/coreui/Specs/Commanding(new).mht )
//---------------------------------------------------------------------------
using System;
using System.Windows.Input;
using System.Windows;
using System.ComponentModel;
using System.Windows.Markup;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input
{
///
/// KeyBinding - Implements InputBinding (generic InputGesture-Command map)
/// KeyBinding acts like a map for KeyGesture and Commands.
/// Most of the logic is in InputBinding and KeyGesture, this only
/// facilitates user to add Key/Modifiers directly without going in
/// KeyGesture path. Also it provides the KeyGestureTypeConverter
/// on the Gesture property to have KeyGesture, like Ctrl+X, Alt+V
/// defined in Markup as Gesture="Ctrl+X" working
///
public class KeyBinding : InputBinding
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructor
///
/// Constructor
///
public KeyBinding() : base()
{
}
///
/// Constructor
///
/// Command associated
/// KeyGesture associated
public KeyBinding(ICommand command, KeyGesture gesture) : base(command, gesture)
{
SynchronizePropertiesFromGesture(gesture);
}
///
/// Constructor
///
///
/// modifiers
/// key
public KeyBinding(ICommand command, Key key, ModifierKeys modifiers) :
this(command, new KeyGesture(key, modifiers))
{
}
#endregion Constructor
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// KeyGesture Override, to ensure type-safety and provide a
/// TypeConverter for KeyGesture
///
[TypeConverter(typeof(KeyGestureConverter))]
[ValueSerializer(typeof(KeyGestureValueSerializer))]
public override InputGesture Gesture
{
get
{
return base.Gesture as KeyGesture;
}
set
{
KeyGesture keyGesture = value as KeyGesture;
if (keyGesture != null)
{
base.Gesture = value;
SynchronizePropertiesFromGesture(keyGesture);
}
else
{
throw new ArgumentException(SR.Get(SRID.InputBinding_ExpectedInputGesture, typeof(KeyGesture)));
}
}
}
///
/// Dependency Property for Modifiers
///
public static readonly DependencyProperty ModifiersProperty =
DependencyProperty.Register("Modifiers", typeof(ModifierKeys), typeof(KeyBinding), new UIPropertyMetadata(ModifierKeys.None, new PropertyChangedCallback(OnModifiersPropertyChanged)));
///
/// Modifiers
///
public ModifierKeys Modifiers
{
get
{
return (ModifierKeys)GetValue(ModifiersProperty);
}
set
{
SetValue(ModifiersProperty, value);
}
}
private static void OnModifiersPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
KeyBinding keyBinding = (KeyBinding)d;
keyBinding.SynchronizeGestureFromProperties(keyBinding.Key, (ModifierKeys)(e.NewValue));
}
///
/// Dependency Property for Key
///
public static readonly DependencyProperty KeyProperty =
DependencyProperty.Register("Key", typeof(Key), typeof(KeyBinding), new UIPropertyMetadata(Key.None, new PropertyChangedCallback(OnKeyPropertyChanged)));
///
/// Key
///
public Key Key
{
get
{
return (Key)GetValue(KeyProperty);
}
set
{
SetValue(KeyProperty, value);
}
}
private static void OnKeyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
KeyBinding keyBinding = (KeyBinding)d;
keyBinding.SynchronizeGestureFromProperties((Key)(e.NewValue), keyBinding.Modifiers);
}
#endregion Public Methods
#region Freezable
protected override Freezable CreateInstanceCore()
{
return new KeyBinding();
}
#endregion
#region Private Methods
///
/// Synchronized Properties from Gesture
///
private void SynchronizePropertiesFromGesture(KeyGesture keyGesture)
{
if (!_settingGesture)
{
_settingGesture = true;
try
{
Key = keyGesture.Key;
Modifiers = keyGesture.Modifiers;
}
finally
{
_settingGesture = false;
}
}
}
///
/// Synchronized Gesture from properties
///
private void SynchronizeGestureFromProperties(Key key, ModifierKeys modifiers)
{
if (!_settingGesture)
{
_settingGesture = true;
try
{
Gesture = new KeyGesture(key, modifiers, /*validateGesture = */ false);
}
finally
{
_settingGesture = false;
}
}
}
#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 KeyBinding class is used by the developer to create Keyboard Input Bindings
//
// See spec at : http://avalon/coreui/Specs/Commanding(new).mht
//
//* KeyBinding class serves the purpose of Input Bindings for Keyboard Device.
//
// History:
// 06/01/2003 : chandras - Created
// 05/01/2004 : chandra - changed to accommodate new design
// ( http://avalon/coreui/Specs/Commanding(new).mht )
//---------------------------------------------------------------------------
using System;
using System.Windows.Input;
using System.Windows;
using System.ComponentModel;
using System.Windows.Markup;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input
{
///
/// KeyBinding - Implements InputBinding (generic InputGesture-Command map)
/// KeyBinding acts like a map for KeyGesture and Commands.
/// Most of the logic is in InputBinding and KeyGesture, this only
/// facilitates user to add Key/Modifiers directly without going in
/// KeyGesture path. Also it provides the KeyGestureTypeConverter
/// on the Gesture property to have KeyGesture, like Ctrl+X, Alt+V
/// defined in Markup as Gesture="Ctrl+X" working
///
public class KeyBinding : InputBinding
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructor
///
/// Constructor
///
public KeyBinding() : base()
{
}
///
/// Constructor
///
/// Command associated
/// KeyGesture associated
public KeyBinding(ICommand command, KeyGesture gesture) : base(command, gesture)
{
SynchronizePropertiesFromGesture(gesture);
}
///
/// Constructor
///
///
/// modifiers
/// key
public KeyBinding(ICommand command, Key key, ModifierKeys modifiers) :
this(command, new KeyGesture(key, modifiers))
{
}
#endregion Constructor
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// KeyGesture Override, to ensure type-safety and provide a
/// TypeConverter for KeyGesture
///
[TypeConverter(typeof(KeyGestureConverter))]
[ValueSerializer(typeof(KeyGestureValueSerializer))]
public override InputGesture Gesture
{
get
{
return base.Gesture as KeyGesture;
}
set
{
KeyGesture keyGesture = value as KeyGesture;
if (keyGesture != null)
{
base.Gesture = value;
SynchronizePropertiesFromGesture(keyGesture);
}
else
{
throw new ArgumentException(SR.Get(SRID.InputBinding_ExpectedInputGesture, typeof(KeyGesture)));
}
}
}
///
/// Dependency Property for Modifiers
///
public static readonly DependencyProperty ModifiersProperty =
DependencyProperty.Register("Modifiers", typeof(ModifierKeys), typeof(KeyBinding), new UIPropertyMetadata(ModifierKeys.None, new PropertyChangedCallback(OnModifiersPropertyChanged)));
///
/// Modifiers
///
public ModifierKeys Modifiers
{
get
{
return (ModifierKeys)GetValue(ModifiersProperty);
}
set
{
SetValue(ModifiersProperty, value);
}
}
private static void OnModifiersPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
KeyBinding keyBinding = (KeyBinding)d;
keyBinding.SynchronizeGestureFromProperties(keyBinding.Key, (ModifierKeys)(e.NewValue));
}
///
/// Dependency Property for Key
///
public static readonly DependencyProperty KeyProperty =
DependencyProperty.Register("Key", typeof(Key), typeof(KeyBinding), new UIPropertyMetadata(Key.None, new PropertyChangedCallback(OnKeyPropertyChanged)));
///
/// Key
///
public Key Key
{
get
{
return (Key)GetValue(KeyProperty);
}
set
{
SetValue(KeyProperty, value);
}
}
private static void OnKeyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
KeyBinding keyBinding = (KeyBinding)d;
keyBinding.SynchronizeGestureFromProperties((Key)(e.NewValue), keyBinding.Modifiers);
}
#endregion Public Methods
#region Freezable
protected override Freezable CreateInstanceCore()
{
return new KeyBinding();
}
#endregion
#region Private Methods
///
/// Synchronized Properties from Gesture
///
private void SynchronizePropertiesFromGesture(KeyGesture keyGesture)
{
if (!_settingGesture)
{
_settingGesture = true;
try
{
Key = keyGesture.Key;
Modifiers = keyGesture.Modifiers;
}
finally
{
_settingGesture = false;
}
}
}
///
/// Synchronized Gesture from properties
///
private void SynchronizeGestureFromProperties(Key key, ModifierKeys modifiers)
{
if (!_settingGesture)
{
_settingGesture = true;
try
{
Gesture = new KeyGesture(key, modifiers, /*validateGesture = */ false);
}
finally
{
_settingGesture = false;
}
}
}
#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
- ImageDrawing.cs
- Timer.cs
- BooleanAnimationUsingKeyFrames.cs
- ProgressPage.cs
- RsaSecurityKey.cs
- HostingEnvironmentException.cs
- RecordConverter.cs
- GorillaCodec.cs
- WindowsComboBox.cs
- LoadedOrUnloadedOperation.cs
- Rotation3DAnimation.cs
- WebRequestModuleElementCollection.cs
- TextBoxBaseDesigner.cs
- TypeElementCollection.cs
- HtmlFormParameterReader.cs
- DataServiceQueryProvider.cs
- PropertyItem.cs
- MethodImplAttribute.cs
- StyleBamlRecordReader.cs
- WebServiceClientProxyGenerator.cs
- CachedCompositeFamily.cs
- DbConnectionInternal.cs
- ButtonFlatAdapter.cs
- WebHttpSecurityElement.cs
- DocumentXPathNavigator.cs
- UnsafeNativeMethods.cs
- Margins.cs
- Span.cs
- Dynamic.cs
- MemberHolder.cs
- Point3DIndependentAnimationStorage.cs
- GuidTagList.cs
- TextShapeableCharacters.cs
- StringComparer.cs
- WsatConfiguration.cs
- ScalarConstant.cs
- SerialPort.cs
- Utilities.cs
- TextWriterEngine.cs
- DrawingContextDrawingContextWalker.cs
- ProtocolImporter.cs
- FontFamilyConverter.cs
- UrlMapping.cs
- ClosableStream.cs
- Span.cs
- ScalarRestriction.cs
- GeneralTransform2DTo3D.cs
- TextServicesCompartment.cs
- TdsParserHelperClasses.cs
- Byte.cs
- TypeLoadException.cs
- __FastResourceComparer.cs
- WriterOutput.cs
- EntityDataSourceViewSchema.cs
- Odbc32.cs
- LongValidatorAttribute.cs
- TextEditorCopyPaste.cs
- OleStrCAMarshaler.cs
- MasterPageParser.cs
- XmlQuerySequence.cs
- StatusBarAutomationPeer.cs
- GradientBrush.cs
- DataRowComparer.cs
- ISessionStateStore.cs
- RegexMatch.cs
- ToolStripLocationCancelEventArgs.cs
- DBPropSet.cs
- WindowsImpersonationContext.cs
- BaseTypeViewSchema.cs
- HostnameComparisonMode.cs
- TrackingProvider.cs
- RegexParser.cs
- XmlSchemaComplexContentRestriction.cs
- ValidationHelper.cs
- CodeParameterDeclarationExpressionCollection.cs
- ActivityExecutionFilter.cs
- DataGridViewCellStyleChangedEventArgs.cs
- XmlNamedNodeMap.cs
- SByte.cs
- WebBrowserPermission.cs
- BasicViewGenerator.cs
- Transform3D.cs
- CustomErrorsSection.cs
- ByteFacetDescriptionElement.cs
- ObjectDataSourceSelectingEventArgs.cs
- XmlKeywords.cs
- CompensationExtension.cs
- EntityDataSourceDesigner.cs
- HttpConfigurationSystem.cs
- SiteMapNodeCollection.cs
- RepeaterDesigner.cs
- QueueProcessor.cs
- DocumentGridPage.cs
- SelectionRange.cs
- GridToolTip.cs
- NameNode.cs
- MailWriter.cs
- WsatServiceCertificate.cs
- Grant.cs
- ClickablePoint.cs