我遇到一個問題,我在 xaml 用了我的自定義控件,但是我給他設定了一個值,但是什麼時候我才可以獲得這個值?
本文告訴大家,從構造函數、loaded、Initialized 的調用過程。
用最簡單的方法建立一個自定義控件,然後在他裡面寫一個屬性
public static readonly DependencyProperty AmameProperty = DependencyProperty.Register(
"Amame", typeof(int), typeof(MargeGlx), new PropertyMetadata(default(int)));
public int Amame
{
get { return (int) GetValue(AmameProperty); }
set { SetValue(AmameProperty, value); }
}
然後在 MainPage 的 xaml 使用它,給他一個屬性值,這裡給他 2
然後寫 load 和 Initialized 函數。
private void OnLoaded(object sender, RoutedEventArgs e)
{
if (Amame == 2)
{
}
}
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
if (Amame == 2)
{
}
}
需要知道的, loaded 是事件,可以在構造使用下面代碼
Loaded += OnLoaded;
然後運作,檢視他們的屬性值是否修改
可以看到在構造函數時,屬性沒有獲得值。
而在 OnInitialized ,同樣,可以看到屬性也沒有獲得值。同時無法獲得 ActualHeight 和 ActualWidth 的值。
在 Loaded 的時候,可以獲得屬性的值,而且可以獲得 ActualHeight 和 ActualWidth 的值。
是以調用順序是 構造-OnInitialized-Loaded
參見:WPF概念解析一: FrameworkElement的Loaded事件和Initialized事件
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuEzM4hDOvwFMuQzLcF2ctMmbtknYvwFbvwFdl5mLz52b0RXdiV2cuV2Ypx2Lc9CX6MHc0RHaiojIsJye.png)
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。歡迎轉載、使用、重新釋出,但務必保留文章署名林德熙(包含連結:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我聯系。
部落格園部落格隻做備份,部落格釋出就不再更新,如果想看最新部落格,請到 https://blog.lindexi.com/
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuEzM4hDOvwFMuQzLcF2ctMmbtknYvwFbvwFdl5mLz52b0RXdiV2cuV2Ypx2Lc9CX6MHc0RHaiojIsJye.png)
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。歡迎轉載、使用、重新釋出,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含連結:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我[聯系](mailto:[email protected])。