Как создать вложенное свойство для загруженного события, чтобы сосредоточиться на элементе в VB.Net и WPF? - PullRequest
0 голосов
/ 23 ноября 2018

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

<UserControl custom:FocusOnElement.FocusOn="{Binding ElementName=MyTextBox}">
<TextBox x:Name="MyTextBox" Text="Focus on me" />

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

Public NotInheritable Class FocusOnElement

Public Shared FocusOnProperty As DependencyProperty = DependencyProperty.RegisterAttached("FocusOn", GetType(FrameworkElement), GetType(FocusOnElement), New FrameworkPropertyMetadata(AddressOf OnSetCallback))

Private Sub New()
End Sub

Public Shared Function GetFocusOn(element As UIElement) As FrameworkElement
    Return CType(element.GetValue(FocusOnProperty), FrameworkElement)
End Function

Public Shared Sub SetFocusOn(element As UIElement, value As FrameworkElement)
    element.SetValue(FocusOnProperty, value)
End Sub

Public Shared Sub FocusOnTarget(target As FrameworkElement)
    Input.Keyboard.Focus(target)
End Sub

Public Shared Sub OnSetCallback(dependencyObject As DependencyObject, dependencyPropertyChangedEventArgs As DependencyPropertyChangedEventArgs)
    Dim fwElement As FrameworkElement = TryCast(dependencyObject, FrameworkElement)
    If fwElement Is Nothing Then Exit Sub

    Dim target = GetFocusOn(fwElement)
    If target Is Nothing Then Return

    AddHandler fwElement.Loaded, Sub() FocusOnTarget(target)
End Sub
End Class

Когда я запускаю код, MyTextBox не получает фокус, но я не получаю никаких ошибок.Что я могу делать не так?Любая помощь или указатели или вещи, чтобы попробовать, будет принята с благодарностью.Спасибо.

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