2009-10-15 7 views
25

기본 제공된 WPF 명령의 전체 목록을 찾고 있습니다.WPF 기본 제공 명령

내가 지금까지 찾은 최고의 목록은 here이지만 모든 명령을 나열하지는 않습니다.

일부는 좋은 - 투 -이 세부 사항은 다음과 같습니다

답변

78

그것은 모든로드 된 어셈블리의 모든 명령의 전체 목록을 표시하기 쉽습니다 : PresentationFramework와

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

난 당신이 절대적으로 완료 볼이 답변의 하단에있는 목록을로드. 당신은 또한 명령 유형 (예 : RoutedUIComand)과 제스처를보고 싶다면

, 당신은 LINQ이를 추가 할 수 있습니다

 let commandType = prop.PropertyType 

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

을 다음 당신의 선택이 될 수있는 뭔가를 같이 :

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

주어진 명령으로 어떤 컨트롤을 수행하는지 프로그래밍 방식으로 알아낼 수도 있습니다. 기본적으로이 같은 작동한다고 (시도하지 않은, 그러나 이것은 당신에게 아이디어를 줄 것이다) :

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

ConvertILToString 아마 이런 식으로 뭔가 될 것이다 : 결과는 어떤 방법을 사용할 수 있습니다

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

당신은 예를 들어 그들은 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 ... 

가 또는 당신은 출력 텍스트 또는 XML 형식의 데이터 나 데이터베이스에 추가 할 수 있습니다. 또한 명령에 의한 목록을 선호하는 경우 외부에서 명령 반복을 사용하여이 두 번째 쿼리를 되돌릴 수 있습니다.

위 코드는 NET Framework 자체를보고 있기 때문에 정확한 사실을 알려주고 거짓말을하지 않습니다.

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 

이 목록이 완료 : 여기

는 PresentationFramework의 모든 명령의 약속 목록입니다.

테마에 추가 제스처가있는 경우 테마 리소스 사전을로드하고 LINQ를 수행하여 쉽게 추출 할 수 있습니다. 검색어는 간단합니다 : <InputGesture>을 검색하면됩니다. 업데이트 : 기본 제스처가 리소스에서로드되기 때문에 테마에 제스처가 있다고 생각하지 않습니다. 따라서이 부분은 아마도 필요하지 않을 것입니다.

+0

남자, 지금까지 최고의 답변이라고 생각합니다. 이번 주말 * classesReferencingCommand * 쿼리를 시도해 보겠습니다. 잠시 동안 다른 질문이 나오는지 확인하기 위해 질문을 열어 두겠습니다. 그렇지만 답을 받아 들여야 할 것 같습니다. 고맙습니다! – jpbochi

6

확인합니다. 이러한 클래스에는 모두 응용 프로그램 내에서 사용할 수 있고 프레임 워크의 내부 컨트롤과 상호 작용할 수있는 다양한 표준 라우팅 명령을 나타내는 정적 속성이 포함되어 있습니다.

+0

이미 살펴 봤지만 찾고있는 정보가 너무 널리 퍼져 있습니다. 나는 모든 명령어들과 몇몇 관련 노트들로 압축 된리스트를 찾고있다. – jpbochi

+2

당신은 명령의 개요를 더 만들려고 노력하고 있습니다. 시간이 있으면 편집 할 것입니다. Microsoft는 WPF 컨트롤에 대한 MSDN 설명서의 표준 섹션을 "지원되는 명령"또는 이와 비슷한 것으로해야합니다. –

+0

그게 내가 말하는거야. 처음에는 MSDN에 이미 그러한 문서가 있다고 생각했습니다. 그래서 저는 커뮤니티 위키라는 질문을했습니다. – jpbochi

1

체크 아웃이 링크 http://en.csharp-online.net/WPF_Concepts%E2%80%94Built-In_Commands

WPF의 내장 명령이 다섯 개 가지 클래스의 정적 속성으로 노출됩니다

* 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

그 질문에 대한 동일한 링크입니다. 어쨌든 답장을 보내 주셔서 감사합니다. – jpbochi