這種情況您可以自己測試: 微軟文檔指定當初始化事件被觸發時,所有屬性都被設置(綁定除外) 如果你創建一個新的用戶控件,並在代碼隱藏文件中定義一個簡單的字符串屬性,然後將這個新控件放在一個頁面上並在那裏設置該屬性,當初始化事件在用戶控件上觸發時,該屬性將不會被設置。 ,這是什麼解決辦法除了使用加載的事件(不能這樣做,因爲我只是在內存中創建控件而不顯示他們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