如何在WPF中更改画布的位置?

叶夫根尼·韦利科夫(Evgeni Velikov)

如何更改在其中动态添加控件(如标签,行)的画布的运行时位置?

我可以使用所有控件缩放画布,但不能通过MouseMove,MouseUp,MouseDown来移动其他位置。

<Canvas Name="canvas" Width="1000" Height="400"
            Margin="100 0 0 50"
            Background="White"
            VerticalAlignment="Bottom"
            HorizontalAlignment="Center"
            MouseWheel="Canvas_MouseWheel"
            MouseMove="Canvas_MouseMove"
            MouseUp="Canvas_MouseUp"
            MouseDown="Canvas_MouseDown">
        <Canvas.RenderTransform>
            <ScaleTransform x:Name="st" />
        </Canvas.RenderTransform>
    </Canvas>

我在互联网上找到了此代码,但对于我的情况却无法正常工作

bool activated;
    Point point;

    private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
    {
        activated = true;
        point = Mouse.GetPosition(canvas);
        Mouse.Capture(canvas);
    }

    private void Canvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (activated)
        {
            double top = Canvas.GetTop(canGraph) + Mouse.GetPosition(canvas).Y - point.Y;
            Canvas.SetTop(canvas, top);
            double left = Canvas.GetLeft(canvas) + Mouse.GetPosition(canvas).X - point.X;
            Canvas.SetLeft(canvas, left);
            point = Mouse.GetPosition(canvas);
        }
    }

    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
    {
        activated = false;
        Mouse.Capture(null);
    }
诅咒

编辑-我提供的先前解决方案在没有更多代码的情况下第一次移动元素后将无法使用,因此这是一个更好的解决方案

为了使画布元素正常工作,必须将其与父元素的坐标系对齐,这是在将画布放在左上角时实现的,如果您不将其放在那里,则必须自己计算差值。

后面的代码

private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
    {
        canvas.CaptureMouse();
    }

    Stopwatch sw = new Stopwatch();
    private void Canvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (canvas.IsMouseCaptured)
        {
            translate.X = e.GetPosition(container).X;
            translate.Y = e.GetPosition(container).Y;
        }
    }

    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
    {
        canvas.ReleaseMouseCapture();
    }

XAML

<Grid Background="Green" x:Name="container">
    <Canvas Name="canvas" Width="100" Height="100"
        Margin="0 0 0 0"
        Background="Purple"
        VerticalAlignment="Top"
        HorizontalAlignment="Left"
        MouseMove="Canvas_MouseMove"

        MouseDown="Canvas_MouseDown">
        <StackPanel Background="White">

        <TextBlock >asdasda</TextBlock>
        <TextBlock >cccc</TextBlock>
        <TextBlock >aaaaa</TextBlock>
        <TextBlock >bbbb</TextBlock>
        </StackPanel>
    <Canvas.RenderTransform>
            <TransformGroup>
                <ScaleTransform x:Name="st" />
                <TranslateTransform x:Name="translate" />
            </TransformGroup>
        </Canvas.RenderTransform>
</Canvas>
</Grid>

原始答案


XAML

我会做这样的事情:

  • 添加一个转换转换并保持先前​​的转换为一组

  • 使用平移转换以移动具有鼠标事件位置的画布

  • 对于翻译的起点,您可以在容器中使用坐标

后面的代码:

bool activated;
    Point point;

    private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
    {
        activated = true;
        point = e.GetPosition(container);
    }

    private void Canvas_MouseMove(object sender, MouseEventArgs e)
    {
        if (activated)
        {
            translate.X = e.GetPosition(container).X - point.X;
            translate.Y = e.GetPosition(container).Y - point.Y;
        }
    }

    private void Canvas_MouseUp(object sender, MouseButtonEventArgs e)
    {
        activated = false;
    }

XAML

<Canvas Name="canvas" Width="100" Height="100"
        Margin="0 0 0 0"
        Background="Purple"
        VerticalAlignment="Stretch"
        HorizontalAlignment="Stretch"
        MouseMove="Canvas_MouseMove"
        MouseUp="Canvas_MouseUp"
        MouseDown="Canvas_MouseDown">
    <Canvas.RenderTransform>
            <TransformGroup>
                <ScaleTransform x:Name="st" />
                <TranslateTransform x:Name="translate" />
            </TransformGroup>
        </Canvas.RenderTransform>
</Canvas>
</Grid>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python中更改指针的位置?

来自分类Dev

如何在WPF中绘制1216画布元素而不挂应用程序

来自分类Dev

如何在Click事件中设置画布ZIndex WPF按钮控件?

来自分类Dev

如何在Android中更改ImageView的位置?

来自分类Dev

如何在WPF中更改鼠标光标的指向位置

来自分类Dev

如何在rmarkdown中更改目录的位置?

来自分类Dev

[WPF]如何在画布上绘制网格?

来自分类Dev

如何在WPF中获取鼠标在屏幕上的位置?

来自分类Dev

如何在WPF中更改视图?

来自分类Dev

如何在WPF中更改画布的位置?

来自分类Dev

如何清除WPF中画布的内容?

来自分类Dev

如何在不更改绘图的情况下更改matplotlib中的图形画布大小?

来自分类Dev

如何在WPF中拖动画布上的按钮

来自分类Dev

如何在VisualBrush上设置ViewPort和ViewBox以在WPF画布中创建虚线背景?

来自分类Dev

如何在画布中获得更多光标位置

来自分类Dev

如何在NavigationBar中更改SearchBar的位置?

来自分类Dev

如何在WPF中更改ScrollBar的样式

来自分类Dev

如何在javascript画布中更改blob的填充颜色?

来自分类Dev

如何在WPF中从“画布”中删除特殊形状?

来自分类Dev

如何在WPF中获取DrawingImage的正确位置

来自分类Dev

如何在juju中更改机器的位置?

来自分类Dev

如何在Wordpress中更改页面位置

来自分类Dev

如何在WPF中更改ListView中特定行的样式

来自分类Dev

如何在响应中更改div的位置?

来自分类Dev

如何在 JavaScript 中更改音频的位置?

来自分类Dev

如何通过wpf画布中的坐标获取矩形位置

来自分类Dev

如何在c#中设置WPF的位置

来自分类Dev

如何在 tkinter 画布上创建文本并更改画布中的文本?

来自分类Dev

如何在python 3.7中设置画布相机位置

Related 相关文章

  1. 1

    如何在python中更改指针的位置?

  2. 2

    如何在WPF中绘制1216画布元素而不挂应用程序

  3. 3

    如何在Click事件中设置画布ZIndex WPF按钮控件?

  4. 4

    如何在Android中更改ImageView的位置?

  5. 5

    如何在WPF中更改鼠标光标的指向位置

  6. 6

    如何在rmarkdown中更改目录的位置?

  7. 7

    [WPF]如何在画布上绘制网格?

  8. 8

    如何在WPF中获取鼠标在屏幕上的位置?

  9. 9

    如何在WPF中更改视图?

  10. 10

    如何在WPF中更改画布的位置?

  11. 11

    如何清除WPF中画布的内容?

  12. 12

    如何在不更改绘图的情况下更改matplotlib中的图形画布大小?

  13. 13

    如何在WPF中拖动画布上的按钮

  14. 14

    如何在VisualBrush上设置ViewPort和ViewBox以在WPF画布中创建虚线背景?

  15. 15

    如何在画布中获得更多光标位置

  16. 16

    如何在NavigationBar中更改SearchBar的位置?

  17. 17

    如何在WPF中更改ScrollBar的样式

  18. 18

    如何在javascript画布中更改blob的填充颜色?

  19. 19

    如何在WPF中从“画布”中删除特殊形状?

  20. 20

    如何在WPF中获取DrawingImage的正确位置

  21. 21

    如何在juju中更改机器的位置?

  22. 22

    如何在Wordpress中更改页面位置

  23. 23

    如何在WPF中更改ListView中特定行的样式

  24. 24

    如何在响应中更改div的位置?

  25. 25

    如何在 JavaScript 中更改音频的位置?

  26. 26

    如何通过wpf画布中的坐标获取矩形位置

  27. 27

    如何在c#中设置WPF的位置

  28. 28

    如何在 tkinter 画布上创建文本并更改画布中的文本?

  29. 29

    如何在python 3.7中设置画布相机位置

热门标签

归档