WPF навигация с помощью кнопок - PullRequest
3 голосов
/ 08 октября 2009

Вопрос: есть ли способ заставить кнопку вести себя как гиперссылка внутри пользовательского элемента управления?


Я искал несколько дней назад и не нашел никого, кто обращался к этому. Как вы используете кнопку для навигации в приложении WPF? В частности, как сделать так, чтобы кнопка внутри пользовательского элемента управления перемещалась по его рамке? Учтите, что пользовательские элементы управления не имеют прямого доступа к фрейму хоста. так просто:

this.NavigationService.Navigate(new Uri(this.addressTextBox.Text));

не будет работать. Я использую пользовательские элементы управления. Если вы используете только страницы, это ответ, который вы ищете, если вы используете UserControls, посмотрите мой ответ ниже.

Ответы [ 2 ]

3 голосов
/ 08 октября 2009

Я чувствую себя бестолковым за ответ на свой вопрос, но я наконец-то понял!

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    Dim pg As Page = CType(GetDependencyObjectFromVisualTree(Me, GetType(Page)), Page)
    Dim newPage As %desired uri here% = New %desired uri here% 
    pg.NavigationService.Navigate(newPage)
End Sub

Private Function GetDependencyObjectFromVisualTree(ByVal startObject As DependencyObject, ByVal type As Type) As DependencyObject
    'Walk the visual tree to get the parent(ItemsControl)
    'of this control
    Dim parent As DependencyObject = startObject

    While (Not (parent) Is Nothing)
        If type.IsInstanceOfType(parent) Then
            Exit While
        Else
            parent = VisualTreeHelper.GetParent(parent)
        End If

    End While
    Return parent
End Function

Эта функция, которую я нашел здесь (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/f8b02888-7e1f-42f4-83e5-448f2af3d207), позволит использовать NavigationService внутри пользовательского элемента управления.

~ N ​​

1 голос
/ 08 октября 2009

Используйте NavigationService .. ::. Метод навигации :

void goButton_Click(object sender, RoutedEventArgs e)
{
   this.NavigationService.Navigate(new Uri(this.addressTextBox.Text));
}
...