2012-05-29 32 views
11

Tôi đang cố gắng thực hiện điều khiển tùy chỉnh bao gồm lưới với một số yếu tố canvas như trẻ em, Khi thao tác vuốt được thực hiện trên lưới, tôi dự định thực hiện một số thao tác với canvas các yếu tố. Tôi không thể xử lý thao tác vuốt cho lưới, tôi đã đăng tương tự trong msdn - win8 Dev forumXử lý thao tác vuốt trong Windows 8 Lưới

+0

Tôi đã cố gắng xử lý con trỏ đã di chuyển, nhập các đại biểu để bắt chước thao tác vuốt, Nhưng tôi không thể phân biệt các cử chỉ Phải-> Trái và Trái-> Phải. Tôi không biết đặt đối tượng GestureRecoginizer cho lưới. –

Trả lời

24

Tôi đã ở trong cùng một thuyền như bạn, vì không có mẫu nào ở đó về cách thực hiện, nhưng sau khi xem xét và kiểm tra tài liệu MSDN về cách cử chỉ vuốt được triển khai trên ứng dụng Windows 8 Store bằng C# , đây là những gì tôi đã đưa ra (và nó hoạt động cho ứng dụng của tôi yêu cầu vuốt lên/xuống/trái/phải):

Trước hết, thay vì GestureRecognizer, các sự kiện Thao tác cần được sử dụng, v.v. lưới mà bạn muốn xử lý swiping (cho phép 'nói rằng bạn làm cho nó để nó mất toàn bộ màn hình để nó giải thích các cử chỉ) làm như sau:

Tôi gọi là lưới của tôi swipingS urface và tôi đang xử lý chế độ thao tác cho cả hai trục Y và trục X:

swipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY; 

Sau đó cấp điện cho các sự kiện thao tác mà bạn muốn được thông báo, trong trường hợp của tôi, tôi chỉ muốn biết thì thao tác bắt đầu và khi nó kết thúc:

swipingSurface.ManipulationStarted += OnManipulationStarted; 
swipingSurface.ManipulationCompleted += OnManipulationCompleted; 

Làm bất cứ điều gì bạn muốn bắt đầu thao tác, chẳng hạn như nhận điểm ban đầu nếu bạn muốn. Nhưng lừa thực tế là trên các sự kiện ManipulationCompleted, trong đó bạn cần phải nhận được vận tốc phát sinh từ cử chỉ của bạn, như sau:

public void OnManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { 
    var velocities = e.Velocities;  
} 

Các ManipulationCompletedEventArgs vận tốc bất động sản sẽ mang lại một cấu trúc kiểu ManipulationVelocities, có chứa các thuộc tính khác bên trong:

- Góc: Tốc độ quay theo độ trên mili giây.

- Mở rộng: Việc mở rộng hoặc chia tỷ lệ theo DIPs trên mili giây.

- Tuyến tính: Tốc độ đường thẳng trong DIP trên mili giây.

Tôi thực sự nhìn vào tuyến tính vận tốc, mà là một điểm có chứa X và Y giá trị cho thấy sự chỉ đạo, trong đó cử chỉ được thực hiện; ví dụ, nếu vuốt lên trên, bạn sẽ nhận thấy rằng giá trị Y là dương, và nếu giá trị Y của nó xuống là âm; tương tự với giá trị X, nếu trượt sang trái, giá trị X là số âm và nếu vuốt sang phải, giá trị X là dương, vì vậy bạn có thể chơi xung quanh với các giá trị đó và kiểm tra hướng vuốt, điểm cuối cùng, v.v. .

Hy vọng điều này sẽ hữu ích.

+0

Vâng, phần vuốt được giải quyết nhờ bạn. Nhưng bây giờ tôi cần phải giải quyết một vấn đề (dunno nếu bạn cũng giải quyết nó). Vuốt không hoạt động trong không gian trống (hãy tưởng tượng rằng bạn có lưới, với ô trống ... bạn không thể vuốt trên các ô đó ngay cả khi bạn nắm bắt các sự kiện đó trong Lưới hoặc trong bố cục) –

+0

@Tiago Almeida bạn có nhận được tất cả các sự kiện khi lưới trống không? –

+2

@RajmohanKathiresan Cuối cùng tôi đã giải quyết nó. Nó chỉ ra rằng bạn cần phải có một nền tảng để bạn có thể nhận được các sự kiện. Ngay cả khi nền đó được đặt thành Trong suốt. –

1

Bạn có thể thử đặt ManipulationMode trên điều khiển có thể vuốt và xử lý Thao tác ~ sự kiện. Lưu ý rằng một số điều khiển có thể ngừng bong bóng của các sự kiện giao diện người dùng, vì vậy nếu bạn nói đặt điều khiển của bạn bên trong một Nút hoặc một ScrollViewer - các sự kiện có thể không hoạt động.

+1

Cảm ơn bạn, tôi sẽ cố gắng với điều đó, bạn có thể hướng dẫn tôi chỉ định một cử chỉ cho một mạng lưới không. 'geustureRecorgizer = new GestureRecognizer(); geustureRecorgizer.CrossSlideHorizontally = true; geustureRecorgizer.GestureSettings = GestureSettings.CrossSlide; geustureRecorgizer.CrossSliding + = new TypedEventHandler (Guesture_Sliding); ' Làm thế nào để gán cử chỉ này cho lưới điện –

+0

Xin lỗi, tôi đã không sử dụng GestureRecognizer được nêu ra. –

1

Bạn có thể xem SwipeHintThemeAnimation sử dụng GestureRecognizer để kết nối với điều khiển hình chữ nhật hoặc sửa đổi để sử dụng điều khiển lưới của bạn, xem the documentation.

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