2012-05-29 20 views
11

我想實現一個自定義控件,它包含一些帶有一些畫布元素的網格作爲子元素,當在網格上進行滑動操作時,我打算使用畫布預製一些操作元素。 我無法處理電網的刷卡,我已經張貼在 msdn - win8 Dev forum在Windows 8 Grid中處理Swipe Guesture

+0

我試圖處理指針移動,輸入代表模仿滑動,但我無法區分右 - >左和左 - >右手勢。 我不知道爲網格設置GestureRecoginizer對象。 –

回答

24

我和你們在同一條船上,因爲在這方面沒有任何樣本,但在仔細閱讀了MSDN文檔後,我們瞭解瞭如何在Windows 8商店應用中使用C#實現輕掃手勢,這是我想到的(它適用於需要向上/向下/向左/向右滑動的應用程序):

首先,不需要使用GestureRecognizer,需要使用操作事件,所以您想要處理滑動的網格(讓我們假設您製作它以便它將整個屏幕用於解釋手勢)執行以下操作:

我打電話給我的網格滑動S urface,我處理兩個Y軸和X軸操作模式:

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

再用線將您要通知操縱事件,在我來說,我只是想知道那麼操作開始和結束的:

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

做任何你想要在你的操控開始,如獲取初始點,如果你想。但實際的訣竅是在ManipulationCompleted事件,您需要在其中得到速度對您的姿勢導致,具體如下:

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

的ManipulationCompletedEventArgs 速度對屬性將帶回型ManipulationVelocities的結構,其中包含其他屬性:

- :以毫秒爲單位的旋轉速度。

- 擴展:DIP中每毫秒的擴展或縮放速度。

- 線性:每毫秒DIP中的直線速度。

我實際上看線性速度,這是一個包含表示對其執行手勢的方向X和Y值;例如,如果滑動向上,您會注意到Y值爲正,而如果向下Y值爲負值, X值也是一樣,如果滑動是左邊的,X值是負值,如果滑動是正確的,X值是正值,所以你可以玩這些值並檢查你的滑動方向,最終點等。

希望這會有所幫助。

+0

那麼,刷卡部分解決了,謝謝你。但現在我需要解決一個問題(不知道你是否也解決了它)。滑動在空白區域不起作用(想象你有一個網格,空單元...即使你在網格或父類中捕獲這些事件,也不能在這些單元上滑動) –

+0

@Tiago Almeida當電網空着時,你是否收到所有事件? –

+2

@RajmohanKathiresan最終我解決了它。事實證明,你需要有一個背景,所以你可以接收事件。即使該背景設置爲「透明」。 –

1

同樣你可以嘗試在你刷卡,能夠控制設置ManipulationMode和處理手法〜事件。請注意,某些控件可能會阻止UI事件的冒泡,因此如果您說把控件放在Button或ScrollViewer中 - 事件可能不起作用。

+1

謝謝,我會盡力,請你指導我爲網格分配一個手勢。 'geustureRecorgizer = new GestureRecognizer(); geustureRecorgizer.CrossSlideHorizo​​ntally = true; geustureRecorgizer.GestureSettings = GestureSettings.CrossSlide; geustureRecorgizer.CrossSliding + =新TypedEventHandler (Guesture_Sliding);' 如何此手勢分配給電網 –

+0

對不起,我還沒有使用GestureRecognizer尚未。 –

1

您可以檢出SwipeHintThemeAnimation,它使用GestureRecognizer連接到矩形控件或修改它以使用網格控件,請參閱the documentation

相關問題