2011-07-05 32 views
7

Tôi có một cửa sổ với cửa sổ bật lên bật lên khi một mục trong một lần xem danh sách được nhấp đúp.
Nó tập trung vào cửa sổ chính và trông rất đẹp ở đó.
Vấn đề là khi người dùng di chuyển cửa sổ chính hoặc chọn một chương trình khác và cửa sổ bật lên nổi lên trên các nội dung khác.WPF Popup Alternative

Tôi muốn có thứ gì đó giống như cửa sổ bật lên, có nghĩa là nó nổi trên các phần tử khác trong cửa sổ nhưng dính với cửa sổ chính khi cửa sổ di chuyển (nằm giữa) và không nổi trên đầu chương trình.
Tôi có thể thực hiện một hành động bật lên như thế này hay là có cách nào tốt hơn để làm điều đó?

+0

Đó là trong VB.Net 2010 và không nghĩ Popup có .Người dùng làm tài sản và nếu tôi thử đặt 'Window.GetWindow (Me) .Owner = Application.Current.MainWindow' tôi gặp lỗi khi nói' Không thể đặt thuộc tính Chủ sở hữu thành chính nó.' Vì vậy, tôi không chắc chắn cách thực hiện điều này một cách chính xác. – AndyD273

+1

Vì đây là lần truy cập hàng đầu trên Google cho "cửa sổ bật lên wpf nổi trên các ứng dụng khác". Nếu bạn muốn sử dụng cửa sổ bật lên vì các lý do khác, tôi chỉ muốn thả một liên kết đến http://stackoverflow.com/questions/16316139/popup-doesnt-lose-focus-and-close-until-ive-clicked-a -control-within-it – Morten

+0

Tuyệt vời, cảm ơn cho tip – AndyD273

Trả lời

3

Có thể là Adorner sẽ phù hợp với nhu cầu của bạn trong trường hợp này tốt hơn so với cửa sổ bật lên. Adorners có thể trôi nổi trên cửa sổ của bạn, quá. Có một vài khác biệt, chủ yếu là một adorner là ràng buộc với một UIElement (trong đó bao gồm các cửa sổ).

+0

Bạn có biết nếu một Adorner có thể được áp dụng cho một yếu tố sau khi thực tế? Tôi đang cố gắng để làm cho chương trình này khá mô-đun, do đó, listview bật lên popup là một phần của một điều khiển người dùng tùy chỉnh, được nhúng trong một trang, mà là bên trong một khung điều hướng trên cửa sổ. Tôi muốn làm cho nó để tất cả tôi phải làm là đặt mã Adorner bên trong kiểm soát người dùng và nói với nó để đính kèm vào cửa sổ. Tôi có thể đính kèm nó vào điều khiển người dùng, nhưng tôi hy vọng sẽ căn giữa nó trong cửa sổ. – AndyD273

+0

Có, chúng có thể được thêm và xóa ngay lập tức như cửa sổ bật lên.Ví dụ, tôi đã viết DataGrid của riêng mình và sử dụng một Adorner làm cửa sổ chỉnh sửa cho các ô. Hãy chắc chắn rằng cửa sổ của bạn có một AdornerLayer (tôi đề nghị thêm một cho Xaml của bạn) và bạn có thể dễ dàng trung tâm các adorner trong nó. –

+0

Bất kỳ tài nguyên tốt nào giải thích quy trình này? Rõ ràng là "AdornerLayer" khá mơ hồ, không có nhiều ví dụ hay về cách tốt nhất để sử dụng nó. hầu hết các ví dụ là "đặt một dấu chấm trên góc của một hộp văn bản" và liên quan đến việc viết một lớp cho mỗi một. Khi điều này được thực hiện, tôi có thể có hơn một tá "popup" điều khiển phong cách, chủ yếu là có chứa một điều khiển người dùng tùy chỉnh, và tôi muốn không phải viết một lớp học cụ thể cho mỗi một nếu tôi có thể giúp nó. Popups rất dễ sử dụng, có thể thiết kế nó trong XAML và hiển thị nó khi cần thiết. Một điều khiển adorner với loại sáng tạo dễ dàng này sẽ là tuyệt vời. – AndyD273

0

tôi đã không tìm thấy một cách để làm cho Popups dừng làm điều đó trong WPF

Là một thay thế, bạn có thể tạo một UserControl mà hoạt động như một Popup.

Thông thường tôi lưu trữ phần nội dung của ứng dụng cùng với cửa sổ bật lên trong điều khiển Canvas và khi IsPopupOpen được thay đổi thành True I đặt popup Visibility = Visible.

+0

Đây có thể là con đường để đi, nhưng tôi vẫn không chắc chắn cách tốt nhất để làm điều đó. ListView nằm trong CustomUserControl, bên trong một trang, bên trong một khung điều hướng, bên trong cửa sổ (không phải là cửa sổ chính, trong trường hợp đó sẽ dễ dàng hơn) – AndyD273

+0

Tôi có thể thêm Canvas vào trang, nhưng tôi ' m không chắc chắn làm thế nào để bong bóng lên lệnh để mở nó từ UserControl – AndyD273

+0

@ AndyD273 Tôi sẽ thêm popup để kiểm soát hàng đầu của bạn (trong trường hợp này, Window), và có một tài sản trong ViewModel của bạn 'IsPopupOpen'. Sau đó, tôi sẽ thiết lập Trình xử lý sự kiện để nghe 'ShowPopupEvent's và hiển thị cửa sổ bật lên khi sự kiện đó được nâng lên. Bạn cũng có thể chuyển nội dung popup như một phần của các tham số ShowPopupEvent. – Rachel

3

Quảng cáo sẽ không di chuyển trong khi cửa sổ được thay đổi kích thước hoặc di chuyển. Bởi vì, Popups/Context menu không phải là một phần của Visual Tree. Bạn phải sử dụng Adorner cho việc này. Tôi sẽ đề nghị để đọc this bốn phần loạt cho một khởi đầu nhanh chóng trên Adorner.

+0

Bạn có biết nếu một Adorner có thể được áp dụng cho một yếu tố sau khi thực tế? Tôi đang cố gắng để làm cho chương trình này khá mô-đun, do đó, listview bật lên popup là một phần của một điều khiển người dùng tùy chỉnh, được nhúng trong một trang, mà là bên trong một khung điều hướng trên cửa sổ. Tôi muốn làm cho nó để tất cả tôi phải làm là đặt mã Adorner bên trong kiểm soát người dùng và nói với nó để đính kèm vào cửa sổ. Tôi có thể đính kèm nó vào điều khiển người dùng, nhưng tôi hy vọng sẽ căn giữa nó trong cửa sổ. – AndyD273

2

Nếu bạn sẵn sàng sử dụng tùy chọn của bên thứ ba/nguồn mở (MS-PL), thì Extended WPF ToolkitChildWindow control.

Về mặt kỹ thuật, đây không phải là một cửa sổ riêng biệt, nhưng có vẻ như đây là cửa sổ riêng cho người dùng.