C# 图像相对于原始位置而不是窗口移动 所以我有一个图像,我从屏幕中间的一个特定位置开始。发生了各种情况,我想更改此图像的位置,但是转换是相对于图像的先前位置进行的,而不是相对于窗口。我觉得这并不是我的代码出了什么问题,而只是WPF的一些奇怪的特性,我没有掌握

C# 图像相对于原始位置而不是窗口移动 所以我有一个图像,我从屏幕中间的一个特定位置开始。发生了各种情况,我想更改此图像的位置,但是转换是相对于图像的先前位置进行的,而不是相对于窗口。我觉得这并不是我的代码出了什么问题,而只是WPF的一些奇怪的特性,我没有掌握,c#,wpf,C#,Wpf,那么,我应该使用什么方法相对于窗口移动图像呢 目前我正在努力 Canvas.SetLeft(this, location.X); Canvas.SetTop(this, location.Y); 顺便说一句,这不起作用。它移动图像,但图像相对于图像的上一个位置而不是窗口移动 这是我要移动的图像的代码 <UserControl x:Class="UserControls.LetterBlock" xmlns="http://schemas.

那么,我应该使用什么方法相对于窗口移动图像呢

目前我正在努力

        Canvas.SetLeft(this, location.X);
        Canvas.SetTop(this, location.Y);
顺便说一句,这不起作用。它移动图像,但图像相对于图像的上一个位置而不是窗口移动

这是我要移动的图像的代码

<UserControl x:Class="UserControls.LetterBlock"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d">
<UserControl.Resources>
    <ResourceDictionary Source="../Dictionaries/LetterBlockTypes.xaml" />
</UserControl.Resources>

<Image Name="LB" HorizontalAlignment="Left" VerticalAlignment="Top" Source="{DynamicResource BLB}" Width="50" Height="50" 
       MouseDown="LetterBlock_MouseDown" MouseMove="LetterBlock_MouseMove" MouseUp="LetterBlock_MouseUp" >
</Image>
</UserControl>

您确定您正在移动图像吗?尝试:

    Canvas.SetLeft(yourImage, location.X);
    Canvas.SetTop(yourImage, location.Y);

考虑到您正在处理用户控件中的图像字母块鼠标向下,我不明白您如何期望图像实例实际为“
this

如果我让您更正,这将解决您的问题

    Point location = e.GetPosition(Application.Current.MainWindow);
    Canvas.SetLeft(this, location.X);
    Canvas.SetTop(this, location.Y);
在鼠标移动事件中,您可能试图根据用户控件或图像检索鼠标位置。但您应该检索主窗口,因为您需要相对于窗口的位置

下面的示例将帮助您检索相对于主窗口的鼠标位置。如果有其他窗口,您可能需要相应地传递引用

    e.GetPosition(Application.Current.MainWindow);

我认为,由于您的父画布没有声明为占用整个屏幕大小,这是意料之中的。我猜画布是自动给定用户控件的维度的。你能发布
LetterBlock\u MouseMove
的完整事件处理程序或相关事件处理程序吗?在UserControl本身上调用
canvas.SetLeft
canvas.SetTop
没有多大意义(除非它真的包含在画布中,当然你不能依赖它).你是否打算将图像控件相对于用户控件进行移动?Weisman你实际上已经找到了问题的答案。我在画布中放置了一块画布,显然这就是问题所在。这个较小的画布在小时候添加了字母块,这让一切都变得一团糟。对其他人来说。是的,我把所有的图形都放在了画布上在画布内部。有没有其他方法可以让我这样做?试过了,它根本不会移动图像。我只让图像随着“这个”移动指示符。您的问题很不清楚。哪一个是画布?活字块用户控件是否继承自画布?活字块用户控件是否延伸到整个窗口,还是与图像大小相同?加载嗅探,添加更多详细信息以发布。这不起作用,因为图像控件不包含在画布中(从问题上看这很明显。)我会在我的编程计算机上试试。听起来很有希望。