2013-08-21 176 views
2

代碼只有一次後用戶控件初始化:如何使屬性設置

public partial class MyControl : UserControl 
{ 
    int size = 8; 

    public int Size 
    { 
     get { return size; } 
     set { size = value; Initialize(); } 
    } 

    public MyControl() 
    { 
     InitializeComponent(); 
     Initialize(); 
    } 

    void Initialize() 
    { 
     // ... 
    } 
} 

XAML:

<local:MyControl"/> 

或:

<local:MyControl Size="10"/> 

Size屬性在XAML中設置,Initialize被稱爲兩次。如果我從InitializeComponent中刪除Initialize呼叫,InitializeSize二傳手調用一次。但在這種情況下,如果在XAML中未設置Size,則根本不調用Initialize

從XAML設置所有控件屬性(如果有)之後,是否有任何方法可以編寫初始化函數?

+1

雖然你可以使用'Loaded'事件,它仍然可以得到多次調用(事件本身,因而你的函數)。如果你只想讓你的函數運行一次,也許有一個bool類成員來檢測函數是否已經被調用,並且忽略了這個函數的未來調用?像這樣:[This](http://stackoverflow.com/a/3303050/1834662) – Viv

回答

3

你可以致電Initialize方法在Loaded事件處理程序:

public partial class MyControl : UserControl 
{ 
    int size = 8; 

    public int Size 
    { 
     get { return size; } 
     set { size = value; } 
    } 

    public MyControl() 
    { 
     InitializeComponent(); 

     Loaded += (o, e) => Initialize(); 
    } 

    void Initialize() 
    { 
     // ... 
    } 
}