2013-04-19 23 views
5

Tôi đã tự hỏi đó là cách chính xác để phát hiện khi một cửa sổ WPF đã được hiển thị cho lần đầu tiên?Cửa sổ WPF. Làm cách nào để phát hiện chương trình đầu tiên?

Xin cảm ơn trước.

+0

WinForms có sự kiện được hiển thị, nhưng tôi nghĩ rằng nó không có sẵn trong WPF. Maye [Khởi tạo] (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.initialized.aspx) là cách đúng để sử dụng – Jehof

Trả lời

6

Có sự kiện được gọi là Loaded mà bạn có thể sử dụng để xác định thời điểm cửa sổ của bạn sẵn sàng.

Từ MSDN

Xảy ra khi nguyên tố này được đặt ra, trả lại, và sẵn sàng cho sự tương tác.

thiết lập các điều khiển trong XAML

<StackPanel 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="SDKSample.FELoaded" 
Loaded="OnLoad" 
Name="root"> 
</StackPanel> 

thêm mã-đằng sau

void OnLoad(object sender, RoutedEventArgs e) 
{ 
    Button b1 = new Button(); 
    b1.Content = "New Button"; 
    root.Children.Add(b1); 
    b1.Height = 25; 
    b1.Width = 200; 
    b1.HorizontalAlignment = HorizontalAlignment.Left; 
} 
+0

Theo [blog MSDN này] (http: // blogs.msdn.com/b/mikehillberg/archive/2006/09/19/loadedvsinitialized.aspx), sự kiện 'Loaded' thực sự xảy ra ngay trước lần render đầu tiên. –

+1

Và OP muốn WPF tương đương với 'Form.Shown', không tương đương với' Form.Loaded'. WPF không làm cho một bản dịch tầm thường này. Chủ đề này (http://stackoverflow.com/questions/9191256/window-shown-event-in-wpf) đề xuất ghi đè 'OnContentRendered' với cờ của riêng bạn để theo dõi xem đây có phải là lần đầu tiên hay không. –

-1

tôi sẽ đề nghị để thực hiện một lá cờ bool và kiểm tra xem nó, và trong các nhà xây dựng thiết lập nó là true

bool FirstTime = true; 

void OnLoad(object sender, RoutedEventArgs e) 
{ 
    if (FirstTime) 
    { 
      FirstTime = false; 
      //do your stuff first-time 
    } 
    else 
    { 
      //do your stuff for other 
    } 
} 
+2

Điều này sẽ không bao giờ nhận được mệnh đề 'else' như' OnLoad' chỉ được gọi một lần. Trước khi lần đầu tiên cửa sổ là 'Hiển thị'. Vấn đề của OP là WPF không có một 'Window.OnShown' tương đương tầm thường. –

-1

Tải có thể được gọi nhiều lần.

The Loaded event and the Initialized event

Theo thử nghiệm của tôi và liên kết ở trên, sự kiện Loaded có thể bị sa thải nhiều hơn một lần.
Vì vậy, bạn cần đặt cờ trong trình xử lý được tải sẵn.

Ví dụ: nếu Bảng điều khiển ngăn xếp nằm trong điều khiển TabItem, quá trình tải sẽ được gọi mỗi lần bạn bước vào tab.

+1

Một liên kết đến một giải pháp được chào đón, nhưng hãy đảm bảo câu trả lời của bạn hữu ích mà không có nó: [thêm ngữ cảnh xung quanh liên kết] (// meta.stackexchange.com/a/8259) để người dùng đồng nghiệp của bạn sẽ có một số ý tưởng và tại sao nó ở đó, sau đó trích dẫn phần có liên quan nhất của trang bạn đang liên kết đến trong trường hợp trang đích không có sẵn. [Câu trả lời có nhiều hơn một liên kết có thể bị xóa.] (// stackoverflow.com/help/deleted-answers) – Bugs

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên đưa các phần quan trọng của câu trả lời vào đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/17173976) – Spektre

Các vấn đề liên quan