2009-10-15 15 views
25

Szukam pełnej listy wbudowanych poleceń WPF.Komendy wbudowane WPF

Najlepszą listą, jaką znalazłem do tej pory, jest here, ale nie zawiera ona wszystkich poleceń.

Niektóre nice-to-mieć dane byłoby:

  • Kontrole/składniki o wsparcie dla komend (np TextBox obsługuje poleceń edycyjnych, takich jak pasta, Kopiuj, Wytnij, Redo i Cofnij) ;

  • Domyślne gesty klawiszy i tekst interfejsu użytkownika (można wyodrębnić z MSDN Library).

Odpowiedz

78

Łatwo wyświetlić pełną listę wszystkich poleceń we wszystkich obciążonych zespołów:

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(); 
    } 

z PresentationFramework ładowane uzyskać listę u dołu tej odpowiedzi, który będzie można zobaczyć jest całkowicie zakończona.

Jeśli też chcesz zobaczyć typ polecenia (np RoutedUIComand) i gestów, można dodać to do LINQ:

 let commandType = prop.PropertyType 

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

wówczas select może być coś takiego:

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

Programowe sprawdzanie, które elementy sterujące robią coś za pomocą danego polecenia, jest również możliwe. Zasadniczo coś jak to powinno działać (nie próbowałem, ale to daje pomysł):

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(); 

gdzie ConvertILToString będzie prawdopodobnie coś takiego:

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

Wyniki mogą być wykorzystane w dowolny sposób chcesz, na przykład mogą być wyświetlane przy użyciu ItemsControl:

<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 ... 

Alternatywnie można wyjściowe dane w formacie tekstowym lub XML lub dodać go do bazy danych. Zauważ też, że to drugie zapytanie można odwrócić za pomocą iteracji poleceń na zewnątrz, jeśli wolisz listowanie według polecenia.

Powyższy kod poda ci dokładne fakty i nie będzie kłamać, ponieważ dotyczy samej struktury NET.

Oto obiecana lista wszystkich poleceń w 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 

Ta lista jest kompletna.

Jeśli w motywach są dodatkowe gesty, można je łatwo wyodrębnić, ładując słownik zasobów kompozycji i wykonując na nim LINQ. Zapytania są banalne: wystarczy wyszukać <InputGesture>. Aktualizacja: Nie myślę, że w motywach są jakieś gesty, ponieważ domyślne gesty są ładowane z zasobów. Ta część prawdopodobnie nie będzie konieczna.

+0

człowiek, myślę, że to najlepsza jak dotąd odpowiedź. Spróbuję w tym tygodniu zapytania * classesReferencingCommand *. Przez pewien czas będę zadawał pytanie, czy coś jeszcze się pojawi, ale domyślam się, że otrzymasz zaakceptowaną odpowiedź. Dziękuję Ci! – jpbochi

6

Sprawdź klas ApplicationCommands, ComponentCommands i NavigationCommands. Wszystkie te klasy zawierają właściwości statyczne reprezentujące różne, standardowe polecenia kierowane, które można wykorzystywać w ramach własnych aplikacji i współdziałać z wewnętrznymi kontrolkami w ramach.

+0

Już na nich patrzyłem, ale informacje, których szukam, są zbyt rozległe. Szukam kompaktowej listy z wszystkimi poleceniami i kilkoma stosownymi notatkami. – jpbochi

+2

Próbujesz zbudować więcej kompendium poleceń, rozumiem. Będę edytować, jeśli mam trochę czasu. Microsoft powinien naprawdę mieć standardową sekcję w dokumentacji MSDN dla formantów WPF o nazwie "Obsługiwane komendy" lub coś w tym stylu. –

+0

O tym właśnie mówię. Początkowo myślałem, że MSDN już posiadał taką dokumentację. I dlatego oznaczyłem to pytanie jako wiki społeczności. – jpbochi

1

Zamówienie ten link http://en.csharp-online.net/WPF_Concepts%E2%80%94Built-In_Commands

wbudowanych komend WPF narażone są jako właściwości statycznych pięciu różnych klasach:

* 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

To jest ten sam link, który umieściłem na pytanie. Dzięki za odpowiedź. – jpbochi