问题描述
|
我希望能够轻松地从XAML代码导航:
<Binding Path=\"Duration\">
属性的相应C#代码:
public static DependencyProperty DurationProperty =
DependencyProperty.Register(\"Duration\",typeof(int),typeof(MainWindow));
我似乎最能做的就是转到包含代码的文件,然后我必须执行文本搜索。似乎应该有更好的方法。
答案可能已经存在,但是我还没有找到正确的关键词组合。
解决方法
由于绑定不是强类型引用,因此我看不到任何方法,它只是要使用的属性的名称,除了您知道哪个类定义了此属性之外,没有人可以使用。尽管例如使用Resharper,您可以使用
navigate to member
(在IntelliJ模式中为ctrl + alt + shift + N)并在其中搜索Duration
,但这将为您提供定义Duration
成员的解决方案中的所有类。
我怀疑这方面是否有任何准备就绪的产品,尽管有人可能会为Visual Studio写一些特定的插件来处理某些情况。
,只需将鼠标光标放在方法名称上,然后按F12
。
它会将您重定向到cs
文件中定义的方法。
,好吧,似乎没有标准的(免费)方法可以做到这一点。但正如其他人指出的那样,它只是带引号的字符串。因此,我在VB中编写了一个小宏,并使用Visual Studio 2010中“运行”和“运行”命令的VS2010宏/外接程序中发现的技术,将其粘贴到XAML代码编辑器的上下文菜单中
Option Strict Off
Option Explicit Off
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
\' This is intended to be used as a quick & dirty \"go to definition\" for
\' properties referenced in XAML. The idea is that you have something like:
\'
\' <Binding Path=\"InterestRate\">
\'
\' You click on the name and run the macro which looks for the current word
\' in quotes (\"InterestRate\") which should match on something like:
\'
\' MainWindow.xaml.cs(41): DependencyProperty.Register(\"InterestRate\",...
\'
Public Module QuotedSearch
Sub DoQuotedSearch()
Dim Pattern As String
DTE.ExecuteCommand(\"Edit.SelectCurrentWord\")
Pattern = \"\"\"\" & DTE.ActiveDocument.Selection.Text & \"\"\"\"
DTE.ExecuteCommand(\"Edit.FindinFiles\")
DTE.Find.FindWhat = Pattern
DTE.Find.Target = vsFindTarget.vsFindTargetFiles
DTE.Find.MatchCase = True
DTE.Find.MatchWholeWord = False
DTE.Find.MatchInHiddenText = True
DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
DTE.Find.SearchPath = \"Current Project\"
DTE.Find.SearchSubfolders = True
DTE.Find.FilesOfType = \"*.*\"
DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResults1
DTE.Find.Action = vsFindAction.vsFindActionFindAll
If (DTE.Find.Execute() = vsFindResult.vsFindResultNotFound) Then
Throw New System.Exception(\"vsFindResultNotFound\")
End If
End Sub
End Module
但是,我仍在寻找更精确的方法。