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)
{
}
}
Đ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. –
Đồ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
Cũng xin xem điều này: http://blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx –