WPF UserControl Инициализированный запуск события перед тем, как установить неформальные свойства - PullRequest
0 голосов
/ 20 сентября 2011

Это ситуация, вы можете проверить это сами: в документации Microsoft указано, что при запуске инициализированного события устанавливаются все свойства (кроме привязок). Если вы создаете новый пользовательский элемент управления и в коде файла выопределите простое строковое свойство, затем вы помещаете этот новый элемент управления на страницу и устанавливаете это свойство там, когда инициализированное событие запускается в пользовательском элементе управления, это свойство не будет установлено.Какой обходной путь для этого, за исключением использования загруженного события (не могу этого сделать, поскольку я только создаю элементы управления в памяти, не отображая их.

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

Public Class UserControl1 

Private _Test As String
Public Property test() As String
    Get
        Return _Test
    End Get
    Set(ByVal value As String)
        _Test = value
    End Set
End Property

Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

End Sub

Protected Overrides Sub OnInitialized(ByVal e As System.EventArgs)
    'MyBase.OnInitialized(e)
    Debug.Write(_Test)
End Sub

Private Sub UserControl_Initialized(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Initialized
    Dim parent As FrameworkElement = Me.Parent
    parent = LogicalTreeHelper.GetParent(Me)
End Sub

End Class

1 Ответ

0 голосов
/ 22 сентября 2011

Мне интересно, почему вы комментируете MyBase.OnInitialized(e)?

Что вы пытаетесь сделать, это установить свойство для дочернего элемента через XAML. Я считаю, что в статье MSDN говорится, что свойства текущего UserControl (если он задан в XAML) будут установлены во время вызова InitializeComponent.

InitializeComponent вызывается во время конструктора UserControl. Родительский элемент (ваша страница) должен будет создать UserControl и, следовательно, запустить конструктор, прежде чем устанавливать какие-либо свойства для него.

Если вы хотите, чтобы ваш ребенок был уведомлен об установке свойства, просто добавьте код в этот установщик свойств.

Другим вариантом может быть вызов sub для потомка после полной загрузки родителя.

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