WPF UserControl在设置正常属性之前初始化事件触发

时间:2011-09-20 15:06:18

标签: .net wpf events user-controls

这种情况,您可以自己测试一下:   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 :(得分:0)

我想知道你为什么评论MyBase.OnInitialized(e)

您尝试做的是通过XAML在子元素上设置属性。我相信MSDN文章说在调用InitializeComponent期间将设置当前UserControl的属性(如果在XAML中设置)。

在UserControl的构造函数期间调用InitializeComponent。父元素(您的页面)必须创建UserControl,因此在构造任何属性之前会导致构造函数运行。

如果您希望在设置属性时通知您的孩子,只需将代码添加到该属性设置器即可。

另一个选项可能是在父完全加载后调用子上的子。