2010-10-13 40 views
7

Tôi cần một điều khiển WebBrowser được nhúng trong ứng dụng của mình và đang gặp sự cố khi hiển thị nội dung WPF trên đầu trang của nó. Ứng dụng đôi khi sẽ hiển thị cửa sổ bật lên để chỉnh sửa dữ liệu hoặc hiển thị lỗi và trình duyệt WebBrowser đang được vẽ trên đầu các cửa sổ bật lên vì đó là điều khiển WinForms.Có cách nào để hiển thị các điều khiển WPF trên đầu trang của điều khiển wpf WebBrowser không?

Cách thay thế tôi xem here sử dụng điều khiển Popup để đặt các mục trên đầu trang của điều khiển WebBrowser, tuy nhiên vấn đề của tôi với Popups là chúng vẫn mở khi bạn chuyển sang ứng dụng khác và chúng không di chuyển cùng ứng dụng của bạn khi người dùng thay đổi kích thước/di chuyển ứng dụng.

Có cách nào khác để tôi có thể thực hiện việc này không? Nội dung web được nhúng là các trang aspx và do đó không phải HTML tĩnh.

Trả lời

4

WebBrowsers nhúng hút, thật không may. Nếu bạn đang hiển thị nội dung web thực, động, động trong Trình duyệt web của mình, bạn phải trải qua sự đau đớn khi liên kết Cửa sổ khác với cửa sổ WebBrowser được lưu trữ trên máy của bạn và xử lý di chuyển/thay đổi kích thước/et al. Tôi đã không nhìn thấy một cách khác hoạt động.

Nếu bạn đang hiển thị nội dung tĩnh (hoặc nội dung từ nguồn mà bạn có thể kiểm soát hoặc ảnh hưởng), bạn có thể xem xét hiển thị tài liệu RTF trong DocumentViewer, không có vấn đề về không gian WebBrowser kiểm soát.

+0

Thật không may nội dung trang web của tôi là động – Rachel

+0

Đánh dấu câu trả lời này vì nó giải thích vấn đề tốt nhất.Những gì tôi thực sự đã làm là tạo ra một phong cách toàn cầu cho các điều khiển WebBrowser mà giấu chúng khi một popup được hiển thị. Nếu tôi cần nội dung web có thể sử dụng được trong khi cửa sổ bật lên mở ra, tôi sẽ thấy về việc triển khai cửa sổ thứ 2 và xử lý vấn đề thay đổi kích thước/di chuyển, nhưng bây giờ điều này phù hợp với mục đích của tôi. – Rachel

2

Một cách bạn có thể giải quyết các vấn đề về không phận là tạo một cửa sổ không khung mới và định vị nó trên đầu trang điều khiển trình duyệt web. Vấn đề chính với điều này là giữ cho nó được định vị đúng khi cửa sổ chính được di chuyển/thay đổi kích cỡ/etc.

+0

Có dự án nào cho điều đó chưa? Cảm ơn. – xmedeko

0

Dự án WPF 4.0 Chromium WebBrowser là một giải pháp thay thế cho bộ điều khiển WebBrowser được tích hợp sẵn nên thực hiện những gì bạn cần.

+0

Tôi đã thử điều đó nhưng dường như không thể biên dịch trên máy tính của mình. – Rachel

0

Một phương pháp khác mà tôi đã có được một số thành công là chơi xung quanh với các vùng cắt để cắt lỗ cơ bản trong điều khiển ActiveX được lưu trữ chủ yếu trong các điều khiển trình bao bọc WebBrowser này. Nếu tôi có thời gian, tôi sẽ viết một minh chứng về những gì tôi đã tìm thấy và cố gắng đưa vào một ví dụ nhưng tôi chỉ muốn chia sẻ điều này trong trường hợp ai đó có nhiều thời gian hơn để xem xét và có thể đánh tôi với cú đấm.

0

Cách giải quyết mà bạn có thể làm là bằng cách tăng chiều cao của trình duyệt web lên 0, khi một số điều khiển khác xuất hiện trước điều khiển trình duyệt Web.

Khắc phục: Khắc phục chuẩn là bạn có thể đặt chiều cao của trình duyệt web bằng không khi bạn kích hoạt một số điều khiển khác tùy thuộc vào kịch bản của bạn. Bên dưới, có triển khai mẫu.

Trong MainWindow.Xaml bao gồm các sự kiện.

Activated="Window_Activated" 
Deactivated="Window_Deactivated" 

Trong Xaml.cs xử lý kịch bản bằng cách đặt chiều cao.

private void Window_Activated(object sender, EventArgs e) 
{ 
    wb.Height = double.NaN; 
} 

private void Window_Deactivated(object sender, EventArgs e) 
{ 
    wb.Height = 0; 
} 
Các vấn đề liên quan