代码之家  ›  专栏  ›  技术社区  ›  Pratik Deoghare

WPF:如何画一个圆并拖动它?

  •  7
  • Pratik Deoghare  · 技术社区  · 16 年前

    我想 .

    我怎样才能做到这一点?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Daniel    16 年前

    “不管它是什么”很重要,因为WPF中元素的放置高度依赖于父容器。

    有一篇代码项目文章描述了如何在Canvas中拖动元素: Dragging Elements in a Canvas

    如果你只想移动那个圆圈,而不想移动现有画布/网格中的其他控件;我建议你使用DragCanvas(来自文章)作为普通Canvas/Grid的覆盖层。

        2
  •  3
  •   Avada Kedavra    10 年前

    <Canvas Background="White" Name="canvas" Width="950" Height="500" MouseDown="MouseMove">
        <Ellipse Name="bola" Canvas.Left="130" Canvas.Top="79" Width="50" Height="50" Fill="Green"  />
    </Canvas>
    

    MouseDown="MouseMoveFunction" 。每当您单击画布时,都会调用该事件处理程序。如果你想让它随着鼠标的移动而移动,请使用 MouseMove="MouseMoveFunction"

    然后,每次移动鼠标时,只需更新椭圆的位置。以下代码位于鼠标事件时调用的函数中:

        private void MouseMove(object sender, MouseEventArgs e)
        {
            Point punto = e.GetPosition(canvas);
            int mouseX = (int)punto.X;
            int mouseY = (int)punto.Y;
            bola.SetValue(Canvas.LeftProperty, (double)mouseX); //set x
            bola.SetValue(Canvas.TopProperty, (double)mouseY); //set y
    
        }
    
        3
  •  1
  •   raddevus    9 年前

    我复制了下面的代码,所以你可以复制它。

    <Window x:Class="WPFExample.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WPFExample"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525" Background="LightGray">
        <Grid>
            <Canvas HorizontalAlignment="Left" Name="MainCanvas"
                    Height="300" Width="500" Margin="5,5,5,5" VerticalAlignment="Top" Background="LightYellow" MouseDown="Canvas_MouseDown" MouseMove="MainCanvas_MouseMove"
                    />
            <Ellipse Name="post" Width="50" Height="50" Fill="Red" Margin="5,5,5,5"  />
    
        </Grid>
    </Window>
    

    接下来,将代码添加到主窗体中:

           private void Draw(Point m)
            {
                MainCanvas.Children.Clear();
    
                int mX = (int)m.X;
                int mY = (int)m.Y;
                Ellipse el = new Ellipse();
                el.Width = 15;
                el.Height = 15;
                el.SetValue(Canvas.LeftProperty, (Double)mX);
                el.SetValue(Canvas.TopProperty, (Double)mY);
                el.Fill = Brushes.Black;
    
                MainCanvas.Children.Add(el);
            }
    
            private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
            {
                Draw(e.GetPosition(MainCanvas));
            }
    
            private void MainCanvas_MouseMove(object sender, MouseEventArgs e)
            {
                Draw(e.GetPosition(MainCanvas));
            }
    

    这是该应用程序的快照——当你运行它并移动鼠标时,无论你在哪里移动鼠标,黑色圆圈都会被重新绘制,就像你在拖动它一样。 black circle redraw

        4
  •  0
  •   AndyUK    6 年前

    我有一篇关于在WPF环境中使用MVVM架构拖放矩形的示例博客文章。内容太长,无法在这里复制,但说明应该相当简单。

    drag and drop rectangle in WPF / MVVM