2010-07-21 38 views

Trả lời

29

Rất tiếc, không có sự kiện nào như vậy. Bạn có thể sử dụng một boolean trong Phương pháp Loaded để đảm bảo công cụ của bạn chỉ bắn một lần -

if(!IsSetUp) 
{ 
    MySetUpFunction(); 
    IsSetUp = true; 
} 

Kiểm tra tuổi thọ sự kiện WPF của Windows ở đây:

http://msdn.microsoft.com/en-us/library/ms748948.aspx#Window_Lifetime_Events

alt text http://i.msdn.microsoft.com/dynimg/IC155674.png

+6

Điều đó thật ngu ngốc, tôi không nên sử dụng mệnh đề bảo vệ như thế. Nhưng đó là câu trả lời đúng vì vậy đây là quan điểm của bạn. –

+1

Đồng ý - bạn có thể tạo lớp cửa sổ của riêng bạn kế thừa từ cửa sổ và thực hiện một sự kiện trên toàn bộ dự án của bạn nếu đó là điều bạn thường xuyên làm. – brendan

+2

Cũng xin xem điều này: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx –

5

Ngoài ra để lưu trữ một cờ boolean, bạn có thể sử dụng một phương pháp mở rộng và ủy nhiệm gói cho giả Loaded chỉ kích hoạt một lần.

public static void OnLoadedOnce(
    this UserControl control, 
    RoutedEventHandler onLoaded) 
{ 
    if (control == null || onLoaded == null) 
    { 
     throw new ArgumentNullException(); 
    } 

    RoutedEventHandler wrappedOnLoaded = null; 
    wrappedOnLoaded = delegate(object sender, RoutedEventArgs e) 
    { 
     control.Loaded -= wrappedOnLoaded; 
     onLoaded(sender, e); 
    }; 
    control.Loaded += wrappedOnLoaded; 
} 

... 

class MyControl : UserControl 
{ 
    public MyControl() 
    { 
     InitializeComponent(); 
     this.OnLoadedOnce(this.OnControlLoaded /* or delegate {...} */); 
    } 

    private void OnControlLoaded(object sender, RoutedEventArgs e) 
    { 
    } 
} 
Các vấn đề liên quan