【问题标题】:drag and drop control within grid wpf with mouse使用鼠标在网格 wpf 中拖放控件
【发布时间】:2013-08-25 01:23:41
【问题描述】:

如何用鼠标在网格 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>

我需要将控制从第一行转移到第二行。这可以用鼠标吗? 我需要拖放图像控件。

【问题讨论】:

标签: wpf drag-and-drop grid


【解决方案1】:

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;
    }

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2023-03-13
    • 2019-09-11
    • 2011-07-18
    • 2015-12-12
    • 1970-01-01
    • 2014-09-23
    • 2018-12-03
    • 2014-04-27
    相关资源
    最近更新 更多