C# 在VisualStudio中,如何快速地从XAML绑定路径导航到相应的代码?

C# 在VisualStudio中,如何快速地从XAML绑定路径导航到相应的代码?,c#,visual-studio,xaml,C#,Visual Studio,Xaml,我希望能够从XAML代码轻松导航: <Binding Path="Duration"> 我能做的最接近的事情就是转到包含代码的文件,然后我必须执行文本搜索。看来应该有更好的办法 答案可能已经在那里了,但我还没有找到正确的关键字组合来找到它。我看不到任何方法来实现它,因为绑定不是强类型引用,它只是要使用的属性的名称,除了您之外,没有人知道哪个类定义了这个属性。尽管例如使用Resharper,您可以使用导航到member(IntelliJ模式中的ctrl+alt+shift+N)并

我希望能够从XAML代码轻松导航:

  <Binding Path="Duration">
我能做的最接近的事情就是转到包含代码的文件,然后我必须执行文本搜索。看来应该有更好的办法


答案可能已经在那里了,但我还没有找到正确的关键字组合来找到它。

我看不到任何方法来实现它,因为绑定不是强类型引用,它只是要使用的属性的名称,除了您之外,没有人知道哪个类定义了这个属性。尽管例如使用Resharper,您可以使用
导航到member
(IntelliJ模式中的ctrl+alt+shift+N)并在那里搜索
Duration
,但这将为您提供解决方案中定义
Duration
成员的所有类


我怀疑在这方面是否有任何生产准备就绪,尽管有人可能会为Visual Studio编写一些特定的加载项来处理一些案例。

嗯,似乎没有一种标准(免费)的方法来做到这一点。但正如其他人所指出的,它只是一个带引号的字符串。因此,我在VB中编写了一个小宏,并使用

选项严格关闭
选项显式关闭
导入系统
进口环境
进口环境80
进口EnvDTE90
进口EnvDTE90a
进口环境数据100
导入系统。诊断
'这是用来作为一个快速和肮脏的“去定义”的
'在XAML中引用的属性。这个想法是,你有一些类似于:
'
'  
'
'单击名称并运行宏以查找当前单词
在引号中(“InterestRate”),应与以下内容匹配:
'
'MainWindow.xaml.cs(41):DependencyProperty.Register(“InterestRate”。。。
'
公共模块QuotedSearch
子DoQuotedSearch()
将图案变暗为字符串
DTE.ExecuteCommand(“Edit.SelectCurrentWord”)
模式=“DTE.ActiveDocument.Selection.Text&”
DTE.ExecuteCommand(“Edit.FindinFiles”)
DTE.Find.FindWhat=模式
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=“当前项目”
DTE.Find.SearchSubfolders=True
DTE.Find.FilesOfType=“***”
DTE.Find.ResultsLocation=vsFindResultsLocation.vsFindResults1
DTE.Find.Action=vsFindAction.vsFindActionFindAll
如果(DTE.Find.Execute()=vsFindResult.vsFindResultNotFound),则
抛出新的System.Exception(“vsFindResultNotFound”)
如果结束
端接头
端模块

不过,我仍在寻找更精确的方法。

只需将鼠标光标放在方法名称上并点击F12


它会将您重定向到
cs
文件中定义的方法。

我只需按F12键,就可以进行声明,但我认为这是一个ReSharper命令。如果您在XAML中定义了datacontext,右键单击>转到定义应该会将您带到那里(不确定该VS命令的键盘快捷键是什么)。您尝试过吗?即使使用DataContext,右键单击“持续时间”也不会生成“转到定义”选项。你必须从ReSharper获得该选项。没有尝试使用DependencyProperty,但我可以通过按F12导航到所有其他绑定…@kzen,是的,我也是。似乎GUI中有一个真正的漏洞。见鬼,在“DurationProperty”上进行文本搜索的选项总比什么都没有好!如果你看DependencyProperty.Register方法的签名,你会发现你的持续时间只是一个字符串,所以雪熊说的有意义。。。
  public static DependencyProperty DurationProperty =
     DependencyProperty.Register("Duration", typeof(int), typeof(MainWindow));
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