2011-01-03 47 views
7

Tôi cần một MessageBox.Show(), nhưng với chức năng mở rộng: hộp thông báo tích hợp cho Windows Phone 7 sẽ không hiển thị các nút tùy ý, chỉ OK hoặc hủy, tôi cần ví dụ CóKhông. Tôi cần phương thức Hiển thị sẽ chỉ trả lại khi người dùng nhấp vào nút. Tôi đã cố gắng để làm cho hộp thư của riêng tôi như là popup. Vấn đề là nó là không đồng bộ như tất cả mọi thứ trong giao diện người dùng thread trong WP7, và tôi không thể chặn giao diện người dùng-thread vì thread UI có trách nhiệm xử lý các sự kiện bấm nút là tốt. Tôi thấy một ví dụ ChildWindow cho WP7, nhưng điều đó cũng không đồng bộ, tôi phải có một phương thức Show() chỉ trả về khi người dùng nhấp chuột. Bất kỳ đề xuất? Một số loại DoEvents() có thể giúp tôi rất nhiều, nhưng không có phương pháp nào như vậy trong WP7: (MessageBox.Show cho Windows Phone 7

Trả lời

6

Bạn có thể sử dụng XNA của Guide.BeginShowMessageBox() để hiển thị một MessageBox với các nút tùy chỉnh. Here's một hướng dẫn về cách sử dụng nó.

Lưu ý rằng tham số MessageBoxIcon không chọn một biểu tượng trên WP7, thay vào đó nó chọn n otification âm thanh khi hộp tin nhắn được hiển thị.

EDIT: Rất tiếc, không đọc yêu cầu đồng bộ của bạn trước khi tôi đăng. Có thể bạn có thể đặt cờ để ngăn chặn bất kỳ điều gì bạn muốn ngăn không cho chạy và đặt lại cờ đó sau khi người dùng đã thực hiện lựa chọn.

+0

Có, nhưng vấn đề lớn nhất của tôi là tôi phải sử dụng một phương thức trả về chỉ khi một nút đã được nhấp. Tôi có thể sử dụng ví dụ một bộ đếm thời gian để chờ cho đến khi bấm vào sự kiện và tiếp tục chương trình trong trình xử lý sự kiện thời gian chờ nếu điều kiện được thỏa mãn, nhưng tôi không thể tìm ra cách thực hiện điều này theo một phương thức: ( – Vic

+0

Tôi đã thử và hoạt động! :): – Vic

+0

AutoResetEvent waitHandle = new AutoResetEvent (false); Hướng dẫn.BeginShowMessageBox ("Phiên bản Windows", "Chọn phiên bản Windows"., Danh sách mới {"Vista", "Bảy"}, 0, MessageBoxIcon.Error, asyncResult => { int ? return = Guide.EndShowMessageBox (asyncResult); waitHandle.Set(); }, null); waitHandle.WaitOne(); điều này không chặn chuỗi giao diện người dùng! Thanx :) – Vic

2

Tôi tìm thấy điều này khi tìm kiếm thứ gì đó tương tự, nhưng chỉ sử dụng hộp thư được tích hợp sẵn. khả năng có các nút tùy chỉnh.

Windows Phone 7 Custom Message Box

+0

Cảm ơn bạn đã trả lời, nhưng phần Show() không hài lòng trong giải pháp này, chỉ có một phần nút tùy ý; nếu tôi sửa đổi điều này: NotificationBox.Show ("Thoát", "Bạn có chắc chắn không?", NotificationBox mớiCommand ("Có",() => {}), NotificationBoxCommand mới ("Không",() => {})); với điều này: AutoResetEvent waitHandle = new AutoResetEvent (false); NotificationBox.Show ("Thoát", "Bạn có chắc chắn không?", NotificationBoxCommand mới ("Có",() => {waitHandle.Set();}), NotificationBoxCommand mới ("Không",() => {waitHandle.Set();})); waitHandle.WaitOne(); ... sau đó tôi nhận được bế tắc, đó là vấn đề của tôi: ( – Vic

1

Sử dụng Canvas có mọi thứ bạn muốn trên đó. Sau đó, chỉ cần sử dụng thuộc tính hiển thị để bật nó lên ..