2012-10-05 47 views
3

我有一個拇指(包含一個TextBlock)和一個畫布內的邊框。 Thumb接收拖動事件,並且正在正確拖動。如何在拖動Thumb時捕捉MouseEnter?

我需要的是在拇指拖動時捕獲邊界上的MouseEnter事件。

問題是在DragCompleted事件後(釋放鼠標按鈕後)觸發MouseEnter。 如何在鼠標按下時鼠標進入邊框時知道?

的XAML:

<Grid> 
<Canvas Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <Canvas Name="dragTarget"> 
     <Thumb 
      DragStarted="Thumb_DragStarted" 
      DragDelta="Thumb_DragDelta" 
      DragCompleted="Thumb_DragCompleted"> 
      <Thumb.Template> 
       <ControlTemplate> 
        <TextBlock 
         Text="Some Text" 
         Foreground="White" 
         Background="DimGray"/> 
       </ControlTemplate> 
      </Thumb.Template> 
     </Thumb> 
    </Canvas> 
    <Border Width="100" Height="100" Margin="50,50,0,0" 
     BorderBrush="AliceBlue" BorderThickness="1" Background="Silver" 
     MouseEnter="Border_MouseEnter"/> 
</Canvas> 

Xaml.cs:

bool isDragging = false; 
double x = 0; 
double y = 0; 

private void Border_MouseEnter(object sender, MouseEventArgs e) 
{ 
    if(isDragging) 
     Title = "Captured"; 
} 

private void Thumb_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) 
{ 
    isDragging = true; 
    x = e.HorizontalOffset; 
    y = e.VerticalOffset; 
} 

private void Thumb_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) 
{ 
    isDragging = false; 
} 

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    x += e.HorizontalChange; 
    y += e.VerticalChange; 
    dragTarget.Margin = new Thickness(x , y , 0, 0); 
} 

回答

1

鼠標拖動時捕捉到,所以你可能不會得到該消息。

在Thumb_DragDelta事件中,使用邊框獲取鼠標位置。這將是相對於邊界。檢查鼠標點是否在邊界內。

Point point = Mouse.GetPosition(border); 

Rect rect = new Rect(0, 0, border.ActualWidth, border.ActualHeight); 
Boolean mouseInBorder = rect.Contains(point); 

if (mouseInBorder && !mouseLastInBorder) 
{ 
    // Mouse enter "event"; 
} 
if (!mouseInBorder && mouseLastInBorder) 
{ 
    // Mouse exit "event"; 
} 
mouseLastInBorder = mouseInBorder; 
+0

謝謝李。我正在尋找一種方法來從放置目標中捕捉事件,因爲實際應用程序中有太多類似邊框的對象。但是你的解決方案工作得很好,並且不會減慢UI。 – Bijan