Dot-Net
WPF 內置命令
我正在尋找內置 WPF 命令的完整列表。
到目前為止我找到的最好的列表是這裡,但它沒有列出所有命令。
一些不錯的細節是:
在所有載入的程序集中顯示所有命令的完整列表很容易:
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(); }載入 PresentationFramework 後,我得到了這個答案底部的列表,你會看到它是絕對完整的。
如果您還想查看命令類型(例如 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 本身。
這是 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這份清單是完整的。
如果主題中有任何額外的手勢,可以通過載入主題資源字典並對其進行一些 LINQ 輕鬆提取。查詢很簡單:只需搜尋
<InputGesture>. **更新:**我認為主題中沒有任何手勢,因為預設手勢是從資源中載入的。所以這部分可能沒有必要。