2011-09-20 71 views
0

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

回答

0

我想知道爲什麼你評論出MyBase.OnInitialized(e)

你想做的是通過XAML設置一個子元素的屬性我相信MSDN文章是說當前UserControl的屬性(如果設置在XAML中)將在調用InitializeComponent期間設置。

在UserControl的構造函數中調用InitializeComponent。在設置任何屬性之前,父元素(你的頁面)必須創建UserControl,並因此導致構造函數運行。

如果您希望在設置屬性時通知您的孩子,只需將代碼添加到該屬性設置器。

另一個選項可能是在父節點完全加載後調用子節點上的子節點。

+0

因此,OnInitialized評論只是針對我嘗試過的一些測試,它不適用於評論或不評論。 – Rdn

+0

關於InitializeComponent還有其他的東西......確實會在UserControl的構造函數中調用,因此將設置用戶控件的XAML頁面內的所有屬性。但是在顯示用戶控件的頁面上設置的那些不會。因此,在我設定這些屬性之後,提出初始化事件似乎是顯而易見的,但這不會發生。初始化確實在UserControl的構造函數存在之前調用,這意味着即使在UserControl的構造函數中的InitializedComponent之後的代碼也不會被調用。 – Rdn

+0

從父母調用一個自定義初始化子的建議不是沒有它自己的問題......你將不得不循環頁面中的所有控件來做到這一點......如果你有很多,這可能是一個性能問題。 .. – Rdn

相關問題