2012-03-13 22 views
5

Tôi đang tải các điều khiển người dùng trong một lưới cụ thể trong ứng dụng của chúng tôi và tôi đang thêm hoạt ảnh vào các điều khiển tải người dùng trong bộ điều khiển sự kiện Loaded của các điều khiển.Có sự kiện nào sau khi đã tải và trước khi hiển thị điều khiển người dùng không?

Một số điều khiển của người dùng có trọng lượng nhẹ và một số người trong số họ cần tính toán nặng trước khi tải. Vấn đề là khi tôi thêm một hoạt ảnh 1 giây vào các điều khiển người dùng nặng thì hãy hiển thị điều khiển để đảm bảo rằng hoạt ảnh không bao giờ được nhìn thấy!

Có sự kiện nào khác mà tôi có thể thêm hoạt ảnh của mình vào điều khiển người dùng sao cho những ảnh nặng và ánh sáng được hiển thị cùng với hình động?

Tôi cần sự kiện ngay trước khi hiển thị kiểm soát. OnLoaded dường như không phù hợp với tôi, thật không may.

Trả lời

5

Câu trả lời là đưa ra bảng phân cảnh. Ưu tiên thấp hơn.

tôi phát hiện ra nó từ câu trả lời này: https://stackoverflow.com/a/4708172/970420

Vì vậy, chúng tôi có mã này cho bắt đầu các hoạt hình:

void BeginStoryboardAction(Storyboard sb) 
    { 
     sb.Begin(); 
    } 

và chúng ta nên gọi nó bằng cách này:

Dispatcher.BeginInvoke(new Action<Storyboard>(BeginStoryboardAction), DispatcherPriority.ContextIdle, sb); 

sb là một phiên bản của Storyboard có một số hoạt ảnh trong đó.

[Chỉnh sửa]: Một cách ngắn hơn:

Dispatcher.BeginInvoke(new Action<Storyboard>(delegate (Storyboard stb){stb.Begin();}), DispatcherPriority.ContextIdle, sb); 
3

Khi cửa sổ được mở lần đầu tiên, sự kiện được tải và ContentRendered chỉ được nâng lên sau khi sự kiện được kích hoạt được nâng lên. Với điều này trong tâm trí, một cửa sổ có hiệu quả có thể được xem xét mở ra khi ContentRendered được nâng lên.

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

+2

Cảm ơn sự quan tâm của Aksel nhưng tôi đã thử nghiệm ContentRendered cho cửa sổ vùng chứa và nó chỉ bị sa thải một lần khi khởi động và không bao giờ bị sa thải nữa. Tuy nhiên tôi nhận được giải pháp :) Các giải pháp cư trú ở đây: http://stackoverflow.com/a/4708172/970420 như Rick nói chúng ta nên lịch trình bảng câu chuyện bắt đầu để nó có ưu tiên thấp nhất. Vì vậy, tôi đã thêm 'void BeginStoryboardAction() {sb.Begin(); } 'và trì hoãn việc gọi nó bằng cách này:' Dispatcher.BeginInvoke (hành động mới (BeginStoryboardAction), DispatcherPriority.ContextIdle); 'nó hoạt động như một sự quyến rũ ngay cả đối với các điều khiển người dùng tải nặng :) –

0

Đối với những người đang tìm kiếm một cách chung chung để thực thi mã ngay sau khi các thành phần được tạo ra nhưng trước khi chúng được trả lại sự kiện LayoutUpdated giúp. Điều này sẽ hoạt động bên trong các cửa sổ cũng như bên trong của người dùng hoặc các điều khiển tùy chỉnh.

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