图像相对于原始位置而不是窗口移动

时间:2014-07-20 06:08:49

标签: c# wpf

所以我有一张图片,我从屏幕中间的特定位置开始。发生了各种各样的事情,我想改变该图像的位置,但是相对于图像的先前位置而不是相对于窗口发生变换。我觉得这并不是我的代码有问题,而只是我不能理解的WPF的一些奇怪功能。

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

目前我正在尝试

        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>

2 个答案:

答案 0 :(得分:0)

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

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

考虑到你在UserControl中处理Image LetterBlock_MouseDown,我看不出你如何期望图像实例实际上是“this”。

答案 1 :(得分:0)

如果我告诉你,这将解决你的问题

    Point location = e.GetPosition(Application.Current.MainWindow);
    Canvas.SetLeft(this, location.X);
    Canvas.SetTop(this, location.Y);

在鼠标移动事件中,您可能正在尝试根据用户控件或图像检索鼠标位置。但您应该检索主窗口,而不是想要相对于窗口的位置。

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

    e.GetPosition(Application.Current.MainWindow);