В Visual Studio как быстро перейти от пути привязки XAML к соответствующему коду? - PullRequest
4 голосов
/ 25 мая 2011

Я хотел бы иметь возможность легко перемещаться по коду XAML:

  <Binding Path="Duration">

к соответствующему коду C # для объекта:

  public static DependencyProperty DurationProperty =
     DependencyProperty.Register("Duration", typeof(int), typeof(MainWindow));

Самое близкое, что я могу сделать, - это перейти к файлу, содержащему код, а затем я должен выполнить текстовый поиск. Кажется, должен быть лучший способ.

Ответ, вероятно, уже существует, но я не нашел правильную комбинацию ключевых слов, чтобы найти его.

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Я не вижу никакого способа сделать это, поскольку привязка не является строго типизированной ссылкой, это просто имя используемого свойства, и никто, кроме вас, не знает, какой класс определяет это свойство. Хотя, например, в Resharper вы можете использовать navigate to member (ctrl + alt + shift + N в схеме IntelliJ) и искать там Duration, но это даст вам все классы в вашем решении, которые определяют член Duration.

Я сомневаюсь, что в этой области что-то готово для производства, хотя кто-то может написать какой-то конкретный плагин для Visual Studio для обработки некоторых случаев.

1 голос
/ 11 декабря 2018

Просто наведите курсор мыши на имя метода и нажмите F12.

Он перенаправит вас на метод, определенный в файле cs.

0 голосов
/ 26 мая 2011

Что ж, похоже, что не существует стандартного (бесплатного) способа сделать это. Но, как отмечали другие, это просто строка с кавычками. Поэтому я написал небольшой макрос на VB и вставил его в контекстное меню редактора кода XAML, используя технику, описанную в Макрос VS2010 / Надстройка для команд «Выполнить» и «Выполнить при» в Visual Studio 2010

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

Однако я все еще ищу что-то более точное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...