2009-06-15 10 views
5

Đây là vấn đề cũ của các yếu tố tương tác bên trong các yếu tố tương tác, nhưng tôi muốn một ScatterViewItem chứa các phần tử tương tác bề mặt khác như SurfaceButton hoặc SurfaceCheckBox. Tôi đã có tất cả các yếu tố của tôi trong đó và họ phản ứng với vòi vv Vấn đề là tôi chỉ nhận được hành vi ScatterView bình thường khi tôi bấm vào một khu vực mà không chứa một điều khiển.ScatterViewItems chứa các yếu tố tương tác bề mặt

Có giải pháp thanh lịch để cho phép kéo ngay cả khi liên hệ trên SurfaceButton hoặc SurfaceCheckbox không?

ví dụ:

<s:ScatterView >  
    <Grid Width="200" Height="200"> 
     <s:SurfaceButton /> 
    </Grid> 
</s:ScatterView> 

Trả lời

1

Sau khi hỏi cùng một câu hỏi trên diễn đàn cộng đồng bề mặt, phản hồi là điều này phù hợp với tất cả hành vi kiểm soát WPF. Ví dụ: nếu bạn thêm các phần tử tương tác vào một hộp danh sách, ListBox sẽ không phản ứng với các tương tác khi chuột qua nút.

Nếu có ai khác gặp phải vấn đề này, có lẽ tốt nhất là giải quyết vấn đề này thông qua việc thiết kế kiểm soát thay vì cố gắng để hack hành vi này lại với nhau. Hành vi kiểm soát phải duy trì nhất quán từ một ứng dụng này đến ứng dụng khác và một điều khiển cho ứng dụng khác.

+0

đã cũ và vẫn không có bài đăng nào khác. Đã đánh dấu nó như là câu trả lời cho bây giờ, nhưng nếu bất cứ ai trong tương lai thêm một câu trả lời tốt hơn tôi sẽ thay đổi nó;) –

+0

Chúc ai đó đã nhìn vào điều này hơn nữa. Nó khá tự nhiên để có các yếu tố tương tác trong nhau. –

0

bạn có thể 'hack' hành vi này bằng cách lắng nghe sự kiện ContactLeave trên một trong các điều khiển con và trong đó, gọi contact.Capture (scatterviewitem). điều này sẽ cho svi biết để tiếp nhận việc lắng nghe và trả lời liên lạc. tuy nhiên, nó sẽ dẫn đến hành vi không phù hợp với các phần khác của Bề mặt và có thể gây nhầm lẫn. nó cũng không nhất quán ngay cả với chính nó ... điều này làm cho nó có thể chuyển từ điều khiển bên trong sang SVI mà không nhấc ngón tay của bạn lên nhưng người dùng vẫn phải nhấc ngón tay của mình để chuyển về điều khiển bên trong.

0

Để giải quyết vấn đề này, điều quan trọng là để phân biệt giữa xem trước các sự kiện không preview und:

http://eightyeightpercentnerd.blogspot.com/2008/06/wpf-preview-vs-non-preview-events.html

Vì vậy, bạn có thể quyết định sự kiện mà bạn muốn nghe.

Tuy nhiên, với tư cách là một lời khuyên chung, bạn nên đặt Cờ được xử lý của sự kiện thành true, nếu nó không được định tuyến thêm nữa.