2010-08-02 3 views
1

J'essaye d'avoir un canevas WPF avec des rectangles arrondis que je peux faire glisser en utilisant la souris. Cependant, une fois que j'essaie de capturer la souris sur la toile, je ne reçois plus les mouvements.WPF Pas d'envoi d'événements MouseMove après CaptureMouse();

Il s'agit d'un contrôle utilisateur "mycanvas" et les rectangles sont des commandes utilisateur "foo". Le XAML pour ces (moins le préambule) sont les suivants:

mycanvas.xaml:

<Canvas MouseDown="CanvasMouseDown" MouseMove="CanvasMouseMove" MouseUp="CanvasMouseUp" Background="White"> 

    <my:Foo HorizontalAlignment="Left" Canvas.Left="97" Canvas.Top="30" x:Name="m_foo" VerticalAlignment="Top" Height="87" Width="128" /> 
</Canvas> 

foo.xaml:

<Border BorderThickness="2" BorderBrush="Black" CornerRadius="15" Background="Plum"> 
    <Grid> 
     <Label Content="Foo" Height="28" HorizontalAlignment="Left" Margin="6,6,0,0" Name="label1" VerticalAlignment="Top" /> 
    </Grid> 
</Border> 

Et les gestionnaires sont: mycanvas.xaml.cs: Le MouseDown se déclenche et la CaptureMouse est appelée (et fonctionne parce que je ne peux plus Cliquez sur l'application ou cliquez dessus!) mais le MouseMove n'est jamais appelé - alors où les événements MouseMove sont-ils envoyés maintenant ???

Si je bascule vers une autre application et que je reviens maintenant tout de suite, le MouseMove est appelé et le Foo se déplace avec la souris.

Répondre

7

vous pouvez soit essayer:

Mouse.Capture(this, CaptureMode.SubTree); 

ou

m_moving.CaptureMouse(); 
... 
if (m_moving != null) 
{ 
    m_moving.ReleaseMouseCapture(); 
    m_moving = null; 
} 

Les événements de souris ont été soulevées par le Foo, et non par le Canevas, donc quand vous capturez la souris avec la toile que vous les empêcher de être élevé.

+0

semble fonctionner. Merci. (Je ne comprends toujours pas pourquoi mais bon ..) – MrPurpleStreak

1

Vous pouvez directement utiliser l'événement MouseMove sur la fenêtre:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     this.MouseMove += MouseEventHandler; 

    } 

    private void MouseEventHandler(Object sender, MouseEventArgs e) 
    { 
     System.Windows.Point position = e.GetPosition(this); 

     Canvas.SetLeft(ElipseElement, position.X-5); 
     Canvas.SetTop(ElipseElement, position.Y-5);  


    } 
} 
Questions connexes