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
- DataSysAttribute.cs
- PingOptions.cs
- PrintingPermission.cs
- ConstraintEnumerator.cs
- FileLogRecordHeader.cs
- FormViewModeEventArgs.cs
- CatalogZone.cs
- CompiledQuery.cs
- DataRelation.cs
- CodeCompiler.cs
- MethodBuilderInstantiation.cs
- MimePart.cs
- RegistrySecurity.cs
- WebPartManager.cs
- DataSetMappper.cs
- TreeViewEvent.cs
- ImageAutomationPeer.cs
- FontDialog.cs
- CaseCqlBlock.cs
- BindingSourceDesigner.cs
- QuadTree.cs
- HasCopySemanticsAttribute.cs
- XmlSchemaSet.cs
- WebControlAdapter.cs
- PseudoWebRequest.cs
- FormViewInsertedEventArgs.cs
- WeakReferenceEnumerator.cs
- MiniCustomAttributeInfo.cs
- ObsoleteAttribute.cs
- EntityTypeEmitter.cs
- CustomAttributeBuilder.cs
- HGlobalSafeHandle.cs
- AQNBuilder.cs
- StatusBarPanelClickEvent.cs
- XmlSerializationWriter.cs
- SQLBoolean.cs
- XmlValidatingReader.cs
- XamlTreeBuilder.cs
- EncoderNLS.cs
- ContentElement.cs
- InterleavedZipPartStream.cs
- TextPattern.cs
- ConvertBinder.cs
- SweepDirectionValidation.cs
- OrthographicCamera.cs
- XomlCompilerHelpers.cs
- ListViewCommandEventArgs.cs
- BitmapPalettes.cs
- SystemNetHelpers.cs
- TextSelectionProcessor.cs
- QilParameter.cs
- TypedAsyncResult.cs
- OpCellTreeNode.cs
- EntityDataSourceMemberPath.cs
- ToolboxCategoryItems.cs
- MemberRelationshipService.cs
- ControlBindingsCollection.cs
- ResourceReferenceKeyNotFoundException.cs
- BadImageFormatException.cs
- ColorTranslator.cs
- EntityClassGenerator.cs
- EventHandlerList.cs
- CurrencyManager.cs
- Event.cs
- ConvertersCollection.cs
- WizardStepBase.cs
- RepeatBehaviorConverter.cs
- CursorConverter.cs
- FixedSOMElement.cs
- ClickablePoint.cs
- ProvidePropertyAttribute.cs
- FixedDocumentSequencePaginator.cs
- View.cs
- DbConnectionInternal.cs
- PropertyInfoSet.cs
- InputProcessorProfilesLoader.cs
- BrowserDefinitionCollection.cs
- UnsafeNativeMethods.cs
- DataRecordInfo.cs
- TabControlToolboxItem.cs
- HttpValueCollection.cs
- UseLicense.cs
- AxisAngleRotation3D.cs
- ImportDesigner.xaml.cs
- _SslSessionsCache.cs
- MexNamedPipeBindingElement.cs
- BitVector32.cs
- DataAdapter.cs
- DecoratedNameAttribute.cs
- ProgressPage.cs
- FlowPanelDesigner.cs
- PathFigure.cs
- DataGridColumnCollection.cs
- DataProviderNameConverter.cs
- EntityDataSourceStatementEditor.cs
- MdImport.cs
- NewArrayExpression.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- RenderingBiasValidation.cs
- FileDetails.cs