2013-10-08 100 views
0

我正在寫一個Silverlight應用程序,在有需求的地方,我需要在圖像上繪製矩形並將其與鼠標移動一起移動。我可以通過點擊鼠標左鍵來移動矩形,但現在我需要移動而不點擊或按住鼠標左鍵。用鼠標移動矩形而不點擊任何按鈕

我見過很多例子,但它們都是在左鍵單擊時實現移動的形狀和矩形,這絕對不是我的要求。

我嘗試了很多方法,但無法做到正確。以下是我目前所做的代碼。任何建議都會受到歡迎。

XAML

<Canvas x:Name="draw" Grid.Column="0" Background="Transparent" 
      Margin="0,0,0,150" Grid.RowSpan="2"> 

     <Rectangle x:Name="SquareBlue" Width="100" Height="100" Canvas.Top="155" Canvas.Left="268" Fill="Transparent" Stroke="Black" StrokeThickness="2" /> 
    </Canvas> 

     <Image x:Name="myImage" Height="100"/> 
     <TextBox x:Name="X" Margin="0,0,110,0"></TextBox> 
     <TextBox x:Name="Y" Margin="0,0,110,0"/> 
     <Image x:Name="pictureBox1" Height="100"/> 

代碼隱藏

​​

回答

0

你可能要考慮每當Shape_MouseMove觸發捕獲的形狀。 然後,每個鼠標在畫布/窗口上移動都會將形狀移動到鼠標光標的中心。 然後您必須決定何時將其釋放:

  1. 通過檢測鼠標何時離開畫布/窗口。
  2. 使用明確釋放按鈕。
  3. 檢查mouseMove事件之間的時間。如果1秒過去了,則處於邏輯狀態,其形狀不是並且不能在mouseMove中捕獲。只有當鼠標不在狀態時,才能恢復到正常狀態。所以用戶將失去動作,必須將光標移出並再次捕捉。另外,當進入3中描述的狀態時,啓動計時器,然後如果一秒鐘後光標在形狀上,則重新捕捉。
+0

有意義,但你有沒有任何示例代碼相同,因爲我已經嘗試了很多方法! – DotNetGeek

+0

其中大部分只是改變你現在的例子。關於計時建議,您可以使用DateTime.Now來檢查時間差異並使用計時器,如http://msdn.microsoft.com/en-us/library/393k7sb1.aspx,並將計時器的AutoReset設置爲false實現我在4中提出的建議。我用於WinForms應用程序,所以SilverLight可能不會完全相同。祝您好運。 – Hanan