这种情况您可以自己测试: 微软文档指定当初始化事件被触发时,所有属性都被设置(绑定除外) 如果你创建一个新的用户控件,并在代码隐藏文件中定义一个简单的字符串属性,然后将这个新控件放在一个页面上并在那里设置该属性,当初始化事件在用户控件上触发时,该属性将不会被设置。 ,这是什么解决办法除了使用加载的事件(不能这样做,因为我只是在内存中创建控件而不显示他们WPF UserControl在设置Notmal属性之前初始化事件触发
下面是用户控件的代码:
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
因此,OnInitialized评论只是针对我尝试过的一些测试,它不适用于评论或不评论。 – Rdn
关于InitializeComponent还有其他的东西......确实会在UserControl的构造函数中调用,因此将设置用户控件的XAML页面内的所有属性。但是在显示用户控件的页面上设置的那些不会。因此,在我设定这些属性之后,提出初始化事件似乎是显而易见的,但这不会发生。初始化确实在UserControl的构造函数存在之前调用,这意味着即使在UserControl的构造函数中的InitializedComponent之后的代码也不会被调用。 – Rdn
从父母调用一个自定义初始化子的建议不是没有它自己的问题......你将不得不循环页面中的所有控件来做到这一点......如果你有很多,这可能是一个性能问题。 .. – Rdn