2013-08-25 31 views
2

如何使用鼠标在网格wpf内拖放控件?使用鼠标在网格wpf内拖放控件

<Window x:Class="Animation_Move.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" > 
<Grid> 
    <Grid Name="Grm" Width="500" Height="500" Background="#FF14831E"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="100"/> 
      <ColumnDefinition Width="100"/> 
      <ColumnDefinition Width="100"/> 
      <ColumnDefinition Width="100"/> 
      <ColumnDefinition Width="100"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="100"/> 
      <RowDefinition Height="100"/> 
      <RowDefinition Height="100"/> 
      <RowDefinition Height="100"/> 
      <RowDefinition Height="100"/> 
     </Grid.RowDefinitions> 
     <Image Name="Soldier" Grid.Row="1" Grid.Column="1" Source="Soldier-Red.png" Width="26" Height="34" ></Image> 
    </Grid> 

</Grid> 

我需要从第一行偏移控制到第二row.Is这可能与鼠标? 我需要拖放图像控件。

+0

有这[页码]你的问题的解决方案(http://stackoverflow.com/questions/25282443/drag-and-drop-custom-controls -single-in-a-grid-in-wpf)http://stackoverflow.com/questions/25282443/drag-and-drop-custom-controls-between-cells-in-a-grid-in-wpf –

回答

0

View the answer感谢很多@Mediator

Point _anchorPoint; 
    Point _currentPoint; 
    bool _isInDrag; 

    private void root_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     var element = sender as FrameworkElement; 
     _anchorPoint = e.GetPosition(null); 
     if (element != null) element.CaptureMouse(); 
     _isInDrag = true; 
     e.Handled = true; 
    } 

    private readonly TranslateTransform _transform = new TranslateTransform(); 
    private void root_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (!_isInDrag) return; 
     _currentPoint = e.GetPosition(null); 

     _transform.X += _currentPoint.X - _anchorPoint.X; 
     _transform.Y += (_currentPoint.Y - _anchorPoint.Y); 
     RenderTransform = _transform; 
     _anchorPoint = _currentPoint; 
    } 

    private void root_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (!_isInDrag) return; 
     var element = sender as FrameworkElement; 
     if (element != null) element.ReleaseMouseCapture(); 
     _isInDrag = false; 
     e.Handled = true; 
    }