Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / MS / Internal / Commands / CommandHelpers.cs / 1 / CommandHelpers.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Security; using System.Security.Permissions; namespace MS.Internal.Commands { internal static class CommandHelpers { internal static void RegisterCommandHandler(Type controlType, RoutedCommand command, ExecutedRoutedEventHandler executedRoutedEventHandler, params InputGesture[] inputGestures) { RegisterCommandHandler(controlType, command, executedRoutedEventHandler, null, inputGestures); } internal static void RegisterCommandHandler(Type controlType, RoutedCommand command, Key key, ModifierKeys modifierKeys, ExecutedRoutedEventHandler executedRoutedEventHandler, CanExecuteRoutedEventHandler canExecuteRoutedEventHandler) { RegisterCommandHandler(controlType, command, executedRoutedEventHandler, canExecuteRoutedEventHandler, new KeyGesture(key, modifierKeys)); } internal static void RegisterCommandHandler(Type controlType, RoutedCommand command, ExecutedRoutedEventHandler executedRoutedEventHandler, CanExecuteRoutedEventHandler canExecuteRoutedEventHandler, params InputGesture[] inputGestures) { // Validate parameters Debug.Assert(controlType != null); Debug.Assert(command != null); Debug.Assert(executedRoutedEventHandler != null); // All other parameters may be null // Create command link for this command CommandManager.RegisterClassCommandBinding(controlType, new CommandBinding(command, executedRoutedEventHandler, canExecuteRoutedEventHandler)); // Create additional input binding for this command for (int i = 0; i < inputGestures.Length; i++) { CommandManager.RegisterClassInputBinding(controlType, new InputBinding(command, inputGestures[i])); } } internal static bool CanExecuteCommandSource(ICommandSource commandSource) { ICommand command = commandSource.Command; if (command != null) { object parameter = commandSource.CommandParameter; IInputElement target = commandSource.CommandTarget; RoutedCommand routed = command as RoutedCommand; if (routed != null) { if (target == null) { target = commandSource as IInputElement; } return routed.CanExecute(parameter, target); } else { return command.CanExecute(parameter); } } return false; } ////// Executes the command on the given command source. /// ////// Critical - calls critical function (ExecuteCommandSource) /// TreatAsSafe - always passes in false for userInitiated, which is safe /// [SecurityCritical, SecurityTreatAsSafe] internal static void ExecuteCommandSource(ICommandSource commandSource) { CriticalExecuteCommandSource(commandSource, false); } ////// Executes the command on the given command source. /// ////// Critical - sets the user initiated bit on a command, which is used /// for security purposes later. It is important to validate /// the callers of this, and the implementation to make sure /// that we only call MarkAsUserInitiated in the correct cases. /// [SecurityCritical] internal static void CriticalExecuteCommandSource(ICommandSource commandSource, bool userInitiated) { ICommand command = commandSource.Command; if (command != null) { object parameter = commandSource.CommandParameter; IInputElement target = commandSource.CommandTarget; RoutedCommand routed = command as RoutedCommand; if (routed != null) { if (target == null) { target = commandSource as IInputElement; } if (routed.CanExecute(parameter, target)) { routed.ExecuteCore(parameter, target, userInitiated); } } else if (command.CanExecute(parameter)) { command.Execute(parameter); } } } // This allows a caller to override its ICommandSource values (used by Button and ScrollBar) internal static void ExecuteCommand(ICommand command, object parameter, IInputElement target) { RoutedCommand routed = command as RoutedCommand; if (routed != null) { if (routed.CanExecute(parameter, target)) { routed.Execute(parameter, target); } } else if (command.CanExecute(parameter)) { command.Execute(parameter); } } } } // 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
- DataGridHeaderBorder.cs
- BitHelper.cs
- FontUnit.cs
- ImportContext.cs
- OdbcInfoMessageEvent.cs
- EventItfInfo.cs
- ColumnMapVisitor.cs
- LineProperties.cs
- ToolTipAutomationPeer.cs
- SrgsText.cs
- DataMemberConverter.cs
- PropertyDescriptorComparer.cs
- BasePattern.cs
- JsonFormatReaderGenerator.cs
- TypeConverter.cs
- SelectionUIHandler.cs
- EmptyImpersonationContext.cs
- TickBar.cs
- DrawingContextWalker.cs
- ResolveNameEventArgs.cs
- MessagingDescriptionAttribute.cs
- CaseInsensitiveOrdinalStringComparer.cs
- DataBindEngine.cs
- RuleDefinitions.cs
- WebProxyScriptElement.cs
- Iis7Helper.cs
- ProxyWebPartManager.cs
- GlobalizationAssembly.cs
- AssemblyBuilder.cs
- ProofTokenCryptoHandle.cs
- EntityViewGenerationAttribute.cs
- PrintControllerWithStatusDialog.cs
- SafeFileMappingHandle.cs
- GestureRecognizer.cs
- SmiEventSink_DeferedProcessing.cs
- MembershipPasswordException.cs
- HandlerBase.cs
- FileDialog_Vista.cs
- PropertyRecord.cs
- UserPreferenceChangingEventArgs.cs
- CorrelationScope.cs
- Latin1Encoding.cs
- ErrorLog.cs
- StructuralObject.cs
- BinaryObjectReader.cs
- MouseButton.cs
- MethodBody.cs
- _NestedMultipleAsyncResult.cs
- TextTreeUndoUnit.cs
- ThreadSafeMessageFilterTable.cs
- Point3DKeyFrameCollection.cs
- SqlDataSourceConfigureSelectPanel.cs
- StyleBamlTreeBuilder.cs
- PointValueSerializer.cs
- DefaultValueAttribute.cs
- ContextQuery.cs
- ClientRolePrincipal.cs
- RuntimeResourceSet.cs
- InstanceKeyNotReadyException.cs
- CompressedStack.cs
- ConstructorBuilder.cs
- _DigestClient.cs
- XPathNodeIterator.cs
- FolderLevelBuildProviderCollection.cs
- SiteMapNodeItem.cs
- InternalSafeNativeMethods.cs
- RecordConverter.cs
- UdpContractFilterBehavior.cs
- BulletedListEventArgs.cs
- BatchParser.cs
- DispatcherEventArgs.cs
- QilPatternFactory.cs
- RequestDescription.cs
- RawStylusInputCustomDataList.cs
- GacUtil.cs
- WorkflowMarkupSerializer.cs
- ContentWrapperAttribute.cs
- OleDbRowUpdatingEvent.cs
- RuleInfoComparer.cs
- ValueCollectionParameterReader.cs
- SessionEndingEventArgs.cs
- WSFederationHttpSecurityMode.cs
- EntityContainerEmitter.cs
- Transform3D.cs
- IntPtr.cs
- StorageAssociationSetMapping.cs
- SiteMap.cs
- TextParentUndoUnit.cs
- ImmutableAssemblyCacheEntry.cs
- ManagedFilter.cs
- __ComObject.cs
- Permission.cs
- recordstate.cs
- AggregatePushdown.cs
- XmlAttributeAttribute.cs
- TemplateComponentConnector.cs
- HttpProfileGroupBase.cs
- AbsoluteQuery.cs
- StrokeRenderer.cs
- EventSchemaTraceListener.cs