【发布时间】:2014-07-20 06:08:48
【问题描述】:
所以我有一个图像,我让它从屏幕中间的特定位置开始。发生了各种各样的事情,我想改变这个图像的位置,但是转换是相对于图像的先前位置而不是相对于窗口发生的。我觉得这不是我的代码有问题,而只是我没有掌握的 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>
【问题讨论】:
-
我认为由于您的父画布未声明为占用整个屏幕大小,因此这是可以预料的。我猜画布会自动给定用户控件的尺寸。
-
您能否发布
LetterBlock_MouseMove或相关事件处理程序的完整事件处理程序? -
在 UserControl 本身上调用
Canvas.SetLeft和Canvas.SetTop没有多大意义(除非它真的包含在 Canvas 中,当然你不能依赖它)。您是否打算相对于 UserControl 移动 Image 控件? -
Weisman,您实际上已经找到了问题的答案。我在画布中有画布,显然这就是问题所在。这个较小的字母块添加了作为孩子的字母,这让一切都搞砸了。对于其他所有人。是的,我将所有图形都放在了画布中。我应该有其他方法吗?