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
- GridItemCollection.cs
- ActiveXHost.cs
- CompiledRegexRunnerFactory.cs
- Stackframe.cs
- ValueChangedEventManager.cs
- XmlTypeMapping.cs
- PersonalizableTypeEntry.cs
- AsyncOperationManager.cs
- UITypeEditor.cs
- TextServicesContext.cs
- DataTableReaderListener.cs
- HttpClientCertificate.cs
- ParameterToken.cs
- SqlClientMetaDataCollectionNames.cs
- XmlDocumentType.cs
- SpecialTypeDataContract.cs
- CaseStatementSlot.cs
- Pens.cs
- RequestQueryProcessor.cs
- ResXResourceWriter.cs
- ValidationUtility.cs
- DecoderReplacementFallback.cs
- NgenServicingAttributes.cs
- ZipFileInfo.cs
- SqlDataSourceSelectingEventArgs.cs
- ListView.cs
- ReadOnlyTernaryTree.cs
- BinaryObjectInfo.cs
- SplitterEvent.cs
- ConnectionPointCookie.cs
- AstNode.cs
- XmlTypeMapping.cs
- CodeCatchClause.cs
- BindingManagerDataErrorEventArgs.cs
- SharedTcpTransportManager.cs
- DbConnectionPool.cs
- OLEDB_Enum.cs
- HTTPRemotingHandler.cs
- NotImplementedException.cs
- SqlDataSourceQueryEditorForm.cs
- GridToolTip.cs
- CookielessHelper.cs
- StateDesigner.TransitionInfo.cs
- CodeMethodReturnStatement.cs
- Encoder.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- DesignTimeTemplateParser.cs
- SingleAnimationUsingKeyFrames.cs
- Root.cs
- CancelAsyncOperationRequest.cs
- RuntimeWrappedException.cs
- Bezier.cs
- AdornerPresentationContext.cs
- QualificationDataItem.cs
- ObjectConverter.cs
- HandlerBase.cs
- precedingsibling.cs
- InitializationEventAttribute.cs
- EdmType.cs
- Registry.cs
- HtmlDocument.cs
- QueryCoreOp.cs
- StylusPointCollection.cs
- OdbcErrorCollection.cs
- CollectionViewProxy.cs
- LabelEditEvent.cs
- LinkDesigner.cs
- MarkupCompiler.cs
- HMACRIPEMD160.cs
- MexNamedPipeBindingElement.cs
- ToolStripRenderer.cs
- XmlElementAttributes.cs
- XamlGridLengthSerializer.cs
- ReadOnlyTernaryTree.cs
- SmtpClient.cs
- FlowDocument.cs
- WebPartCatalogAddVerb.cs
- SafeFreeMibTable.cs
- CodeAttributeDeclaration.cs
- HttpHandlerAction.cs
- XPathSelectionIterator.cs
- DataBoundControl.cs
- OracleRowUpdatedEventArgs.cs
- COM2ColorConverter.cs
- PermissionListSet.cs
- XmlSchemaExternal.cs
- SemanticResultValue.cs
- CacheMemory.cs
- XsltException.cs
- DispatcherExceptionEventArgs.cs
- DbConnectionHelper.cs
- EntityDesignerBuildProvider.cs
- ImageKeyConverter.cs
- LayoutTableCell.cs
- CodeDOMUtility.cs
- UniqueConstraint.cs
- ImageFormat.cs
- RegisteredDisposeScript.cs
- EdmToObjectNamespaceMap.cs
- Freezable.cs