Перетащите формы - PullRequest
       1

Перетащите формы

2 голосов
/ 26 мая 2011

У меня прямоугольник в стеке, и я хочу перетаскивать сетку мышью с помощью WPF! Я ценю это, если кто-то может мне помочь? Спасибо всем.

Ответы [ 2 ]

7 голосов
/ 26 мая 2011

Далее следует очень простая реализация. Он просто обрабатывает кнопку мыши вниз / вверх / перемещение событий Rectangle, чтобы позиционировать ее вместе с движением мыши. Здесь нет проверки ошибок и ничего, что могло бы помешать пользователю перетащить прямоугольник с холста и оставить его там.

XAML:


<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas Name="canvas">
            <Rectangle
                Name="rect"
                Width="50"
                Height="50"
                Canvas.Left="0"
                Canvas.Top="0"
                Fill="Red"
                MouseLeftButtonDown="rect_MouseLeftButtonDown"
                MouseLeftButtonUp="rect_MouseLeftButtonUp"
                MouseMove="rect_MouseMove"
                />
        </Canvas>
    </Grid>
</Window>

Код сзади:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication6
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private bool _isRectDragInProg;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void rect_MouseLeftButtonDown( object sender, MouseButtonEventArgs e )
        {
            _isRectDragInProg = true;
            rect.CaptureMouse();
        }

        private void rect_MouseLeftButtonUp( object sender, MouseButtonEventArgs e )
        {
            _isRectDragInProg = false;
            rect.ReleaseMouseCapture();
        }

        private void rect_MouseMove( object sender, MouseEventArgs e )
        {
            if( !_isRectDragInProg ) return;

            // get the position of the mouse relative to the Canvas
            var mousePos = e.GetPosition(canvas);

            // center the rect on the mouse
            double left = mousePos.X - (rect.ActualWidth / 2);
            double top = mousePos.Y - (rect.ActualHeight / 2);
            Canvas.SetLeft( rect, left );
            Canvas.SetTop( rect, top );
        }
    }
}
0 голосов
/ 26 октября 2011

Для реализации перетаскивания в элементе управления элементами, где элементы располагаются не на холсте, я настоятельно рекомендую проверить решение Bea Stollnitz . Это полностью повторно используемое решение для перетаскивания между элементами управления с использованием вложенных свойств.

Обновление: , учитывая, что блог Беа исчез, существуют другие сообщения, основанные на ее решении:

  1. https://www.codeproject.com/Articles/43614/Drag-and-Drop-in-WPF
  2. http://blogarchive.claritycon.com/blog/2009/03/generic-wpf-drag-and-drop-adorner
  3. https://siderite.blogspot.com/2011/01/mvvm-drag-and-drop-part-1.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...