2009-10-15 5 views
25

Ich bin auf der Suche nach einer vollständigen Liste der integrierten WPF-Befehle.Integrierte WPF-Befehle

Die beste Liste, die ich bis jetzt gefunden habe, ist here, aber es listet nicht alle Befehle auf.

Einige nice-to-have würden Details sein:

  • Steuerelemente/Komponenten mit Unterstützung für die Befehle (zum Beispiel unterstützt TextBox Bearbeitungsbefehle wie Einfügen, Kopieren, Ausschneiden, Redo und Undo) ;

  • Standard-Tastengesten und UI-Text (kann aus MSDN Library extrahiert werden).

Antwort

78

Es ist leicht, eine komplette Liste aller Befehle in allen geladenen Baugruppen anzuzeigen:

public string[] GetAllCommands() 
    { 
    return (
     from assembly in AppDomain.CurrentDomain.GetAssemblies() 
     from type in assembly.GetTypes() 
     from prop in type.GetProperties() 
     where 
     typeof(ICommand).IsAssignableFrom(prop.PropertyType) && 
     prop.GetAccessors()[0].IsStatic 
     orderby type.Name, prop.Name 
     select type.Name + "." + prop.Name 
    ).ToArray(); 
    } 

Mit PresentationFramework lud ich die Liste am Ende der Antwort, die Sie ist absolut vollständig sehen.

Wenn Sie auch den Befehlstyp (zB RoutedUIComand) und Gesten sehen möchten, können Sie dies auf die LINQ hinzufügen:

 let commandType = prop.PropertyType 

     let gestures = 
     typeof(UIElement).IsAssignableFrom(commandType) ? 
      ((UIElement)prop.GetValue(null)).InputGestures : 
     null 

Dann wird Ihr wählen etwas wie das sein könnte:

 select type.Name + "." + prop.Name + " " + commandType.Name + " " + gestures 

Programmgesteuert herauszufinden, welche Steuerelemente etwas mit einem bestimmten Befehl ausführen, ist ebenfalls möglich. Im Grunde so etwas wie dies funktionieren sollte (nicht ausprobiert, aber dies wird Ihnen die Idee):

var allCommands = (
    from assembly in AppDomain.CurrentDomain.GetAssemblies() 
    from type in assembly.GetTypes() 
    from prop in type.GetProperties() 
    where 
    typeof(ICommand).IsAssignableFrom(prop.PropertyType) && 
    prop.GetAccessors()[0].IsStatic 
    orderby type.Name, prop.Name 
    select new 
    { 
    typeName = type.Name, 
    propName = prop.Name, 
    displayAs = type.Name + "." + prop.Name, 
    } 
).ToArray(); 

var classesReferencingCommand = (
    from assembly in AppDomain.CurrentDomain.GetAssemblies() 
    from type in assembly.GetTypes() 
    from method in type.GetMethods() 
    let methodBodyString = ConvertILToString(method.MethodBody.GetILAsByteArray()) 
    let info = new 
    { 
    typeName = type.FullName, 
    referencedCommands = 
     from cmd in allCommands 
     where 
     methodBodyString.Contains(cmd.typeName) && 
     methodBodyString.Contains(cmd.propName) 
     select cmd 
    } 
    where info.commands.Any() 
    select info 
).ToArray(); 

wo ConvertILToString wahrscheinlich so etwas wie dieses wäre:

static string ConvertILToString(byte[] bytes) 
{ 
    return new string(bytes.Where(b => b!=0).Select(b => (char)b).ToArray()); 
} 

Die Ergebnisse beliebig verwendet werden können, Sie mögen, zum Beispiel können sie eine Itemscontrol angezeigt werden:

<ItemsControl Source="{Binding classesReferencingCommand}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
     <TextBox Text="{Binding typeName}" FontWeight="Bold"> 
     <ItemsControl Source="{Binding referencedCommands}" Margin="10 0 0 0"> 
      <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding displayAs}" /> 
     ... close all tags ... 

Alternativ können die Daten in einem Text- oder XML-Format oder fügen Sie ihn in einer Datenbank, die Sie könnten ausgegeben. Beachten Sie auch, dass diese zweite Abfrage mit der Befehlsiteration auf der Außenseite umgekehrt werden kann, wenn Sie eine Auflistung nach Befehl bevorzugen.

Der obige Code gibt Ihnen die genauen Fakten und wird nicht lügen, weil es das NET Framework selbst betrachtet.Hier

ist die versprochene Liste aller Befehle in PresentationFramework:

ApplicationCommands.CancelPrint 
ApplicationCommands.Close 
ApplicationCommands.ContextMenu 
ApplicationCommands.Copy 
ApplicationCommands.CorrectionList 
ApplicationCommands.Cut 
ApplicationCommands.Delete 
ApplicationCommands.Find 
ApplicationCommands.Help 
ApplicationCommands.New 
ApplicationCommands.NotACommand 
ApplicationCommands.Open 
ApplicationCommands.Paste 
ApplicationCommands.Print 
ApplicationCommands.PrintPreview 
ApplicationCommands.Properties 
ApplicationCommands.Redo 
ApplicationCommands.Replace 
ApplicationCommands.Save 
ApplicationCommands.SaveAs 
ApplicationCommands.SelectAll 
ApplicationCommands.Stop 
ApplicationCommands.Undo 
ComponentCommands.ExtendSelectionDown 
ComponentCommands.ExtendSelectionLeft 
ComponentCommands.ExtendSelectionRight 
ComponentCommands.ExtendSelectionUp 
ComponentCommands.MoveDown 
ComponentCommands.MoveFocusBack 
ComponentCommands.MoveFocusDown 
ComponentCommands.MoveFocusForward 
ComponentCommands.MoveFocusPageDown 
ComponentCommands.MoveFocusPageUp 
ComponentCommands.MoveFocusUp 
ComponentCommands.MoveLeft 
ComponentCommands.MoveRight 
ComponentCommands.MoveToEnd 
ComponentCommands.MoveToHome 
ComponentCommands.MoveToPageDown 
ComponentCommands.MoveToPageUp 
ComponentCommands.MoveUp 
ComponentCommands.ScrollByLine 
ComponentCommands.ScrollPageDown 
ComponentCommands.ScrollPageLeft 
ComponentCommands.ScrollPageRight 
ComponentCommands.ScrollPageUp 
ComponentCommands.SelectToEnd 
ComponentCommands.SelectToHome 
ComponentCommands.SelectToPageDown 
ComponentCommands.SelectToPageUp 
DocumentViewer.FitToHeightCommand 
DocumentViewer.FitToMaxPagesAcrossCommand 
DocumentViewer.FitToWidthCommand 
DocumentViewer.ViewThumbnailsCommand 
EditingCommands.AlignCenter 
EditingCommands.AlignJustify 
EditingCommands.AlignLeft 
EditingCommands.AlignRight 
EditingCommands.Backspace 
EditingCommands.CorrectSpellingError 
EditingCommands.DecreaseFontSize 
EditingCommands.DecreaseIndentation 
EditingCommands.Delete 
EditingCommands.DeleteNextWord 
EditingCommands.DeletePreviousWord 
EditingCommands.EnterLineBreak 
EditingCommands.EnterParagraphBreak 
EditingCommands.IgnoreSpellingError 
EditingCommands.IncreaseFontSize 
EditingCommands.IncreaseIndentation 
EditingCommands.MoveDownByLine 
EditingCommands.MoveDownByPage 
EditingCommands.MoveDownByParagraph 
EditingCommands.MoveLeftByCharacter 
EditingCommands.MoveLeftByWord 
EditingCommands.MoveRightByCharacter 
EditingCommands.MoveRightByWord 
EditingCommands.MoveToDocumentEnd 
EditingCommands.MoveToDocumentStart 
EditingCommands.MoveToLineEnd 
EditingCommands.MoveToLineStart 
EditingCommands.MoveUpByLine 
EditingCommands.MoveUpByPage 
EditingCommands.MoveUpByParagraph 
EditingCommands.SelectDownByLine 
EditingCommands.SelectDownByPage 
EditingCommands.SelectDownByParagraph 
EditingCommands.SelectLeftByCharacter 
EditingCommands.SelectLeftByWord 
EditingCommands.SelectRightByCharacter 
EditingCommands.SelectRightByWord 
EditingCommands.SelectToDocumentEnd 
EditingCommands.SelectToDocumentStart 
EditingCommands.SelectToLineEnd 
EditingCommands.SelectToLineStart 
EditingCommands.SelectUpByLine 
EditingCommands.SelectUpByPage 
EditingCommands.SelectUpByParagraph 
EditingCommands.TabBackward 
EditingCommands.TabForward 
EditingCommands.ToggleBold 
EditingCommands.ToggleBullets 
EditingCommands.ToggleInsert 
EditingCommands.ToggleItalic 
EditingCommands.ToggleNumbering 
EditingCommands.ToggleSubscript 
EditingCommands.ToggleSuperscript 
EditingCommands.ToggleUnderline 
MediaCommands.BoostBass 
MediaCommands.ChannelDown 
MediaCommands.ChannelUp 
MediaCommands.DecreaseBass 
MediaCommands.DecreaseMicrophoneVolume 
MediaCommands.DecreaseTreble 
MediaCommands.DecreaseVolume 
MediaCommands.FastForward 
MediaCommands.IncreaseBass 
MediaCommands.IncreaseMicrophoneVolume 
MediaCommands.IncreaseTreble 
MediaCommands.IncreaseVolume 
MediaCommands.MuteMicrophoneVolume 
MediaCommands.MuteVolume 
MediaCommands.NextTrack 
MediaCommands.Pause 
MediaCommands.Play 
MediaCommands.PreviousTrack 
MediaCommands.Record 
MediaCommands.Rewind 
MediaCommands.Select 
MediaCommands.Stop 
MediaCommands.ToggleMicrophoneOnOff 
MediaCommands.TogglePlayPause 
NavigationCommands.BrowseBack 
NavigationCommands.BrowseForward 
NavigationCommands.BrowseHome 
NavigationCommands.BrowseStop 
NavigationCommands.DecreaseZoom 
NavigationCommands.Favorites 
NavigationCommands.FirstPage 
NavigationCommands.GoToPage 
NavigationCommands.IncreaseZoom 
NavigationCommands.LastPage 
NavigationCommands.NavigateJournal 
NavigationCommands.NextPage 
NavigationCommands.PreviousPage 
NavigationCommands.Refresh 
NavigationCommands.Search 
NavigationCommands.Zoom 
Slider.DecreaseLarge 
Slider.DecreaseSmall 
Slider.IncreaseLarge 
Slider.IncreaseSmall 
Slider.MaximizeValue 
Slider.MinimizeValue 

Diese Liste ist abgeschlossen.

Wenn es irgendwelche zusätzlichen Gesten in die Themen sind, können sie leicht durch das Laden des Wörterbuch Thema Ressource extrahiert werden und einige LINQ auf es zu tun. Die Abfragen sind trivial: Suchen Sie einfach nach <InputGesture>. Update: Ich glaube nicht, dass es Gesten in den Themen gibt, da die Standardgesten aus Ressourcen geladen werden. Daher wird dieser Teil wahrscheinlich nicht notwendig sein.

+0

Mann, ich denke, das ist die beste Antwort bisher. Ich werde dieses Wochenende die Abfrage * classesReferencingCommand * ausprobieren. Für eine Weile werde ich die Frage offen halten, um zu sehen, ob noch etwas anderes kommt, aber ich nehme an, Sie werden die akzeptierte Antwort haben. Vielen Dank! – jpbochi

6

Schauen Sie sich die ApplicationCommands, ComponentCommands und NavigationCommands Klassen. Diese Klassen enthalten alle statische Eigenschaften, die verschiedene Standard-Routinbefehle darstellen, die Sie in Ihren eigenen Anwendungen verwenden und mit den systeminternen Steuerelementen im Framework interagieren können.

+0

Ich habe sie schon angeschaut, aber die Informationen, nach denen ich suche, sind zu weit verteilt. Ich suche nach einer kompakten Liste mit allen Befehlen und einigen relevanten Hinweisen. – jpbochi

+2

Sie versuchen, ein Kompendium von Befehlen zu bauen, verstehe ich. Ich werde bearbeiten, wenn ich etwas Zeit habe. Microsoft sollte wirklich einen Standardabschnitt in der MSDN-Dokumentation für WPF-Steuerelemente haben, die "Unterstützte Befehle" oder etwas ähnliches genannt werden. –

+0

Das ist, worüber ich spreche. Anfangs dachte ich, MSDN hätte bereits solche Dokumentation. Und deshalb habe ich die Frage als Community-Wiki markiert. – jpbochi

1

Kasse Link http://en.csharp-online.net/WPF_Concepts%E2%80%94Built-In_Commands

WPF integrierten Befehle werden als statische Eigenschaften von fünf verschiedenen Klassen ausgesetzt:

* ApplicationCommands—Close, Copy, Cut, Delete, Find, Help, New, Open, Paste, Print, PrintPreview, Properties, Redo, Replace, Save, SaveAs, SelectAll, Stop, Undo, and more 

    * ComponentCommands—MoveDown, MoveLeft, MoveRight, MoveUp, ScrollByLine, ScrollPageDown, ScrollPageLeft, ScrollPageRight, ScrollPageUp, SelectToEnd, SelectToHome, SelectToPageDown, SelectToPageUp, and more 

    * MediaCommands—ChannelDown, ChannelUp, DecreaseVolume, FastForward, IncreaseVolume, MuteVolume, NextTrack, Pause, Play, PreviousTrack, Record, Rewind, Select, Stop, and more 

    * NavigationCommands—BrowseBack, BrowseForward, BrowseHome, BrowseStop, Favorites, FirstPage, GoToPage, LastPage, NextPage, PreviousPage, Refresh, Search, Zoom, and more 

    * EditingCommands—AlignCenter, AlignJustify, AlignLeft, AlignRight, CorrectSpellingError, DecreaseFontSize, DecreaseIndentation, EnterLineBreak, EnterParagraphBreak, IgnoreSpellingError, IncreaseFontSize, IncreaseIndentation, MoveDownByLine, MoveDownByPage, MoveDownByParagraph, MoveLeftByCharacter, MoveLeftByWord, MoveRightByCharacter, MoveRightByWord, and more 
+0

Das ist der gleiche Link, den ich auf die Frage gestellt habe. Danke für die Antwort. – jpbochi