cod*_*ple 1 c# wpf drag-and-drop
我试图将图像从画布上的一个点拖放到另一个点(应该相对简单),但无法弄明白.我要移动的图像有以下XAML:
<Image Height="28" HorizontalAlignment="Left" Margin="842,332,0,0" Name="cityImage" Stretch="Fill" VerticalAlignment="Top" Width="42" Source="/Settlers;component/Images/city.png" MouseLeftButtonDown="cityImage_MouseLeftButtonDown" MouseMove="cityImage_MouseMove" MouseLeftButtonUp="cityImage_MouseLeftButtonUp"/>
Run Code Online (Sandbox Code Playgroud)
代码如下:
bool isDragging = false; Point initMousePos; private void cityImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
isDragging = true;
initMousePos = e.GetPosition(theGrid); } private void cityImage_MouseMove(object sender, MouseEventArgs e) {
if (isDragging)
{
Image image = sender as Image;
Canvas.SetTop(image, initMousePos.X);
Canvas.SetLeft(image, initMousePos.Y);
image.Visibility = System.Windows.Visibility.Visible;
} }
Run Code Online (Sandbox Code Playgroud)
private void cityImage_MouseLeftButtonUp(object sender,MouseButtonEventArgs e){isDragging = false; }
我做什么来完成你想要的是使用
System.Windows.Controls.Primitives.Thumb
Run Code Online (Sandbox Code Playgroud)
作为UserControl的Root并设置ControlTemplate以显示图像(在边框内,但它应该没有那么好),如下所示:
<Thumb Name="myRoot" DragDelta="MyRootDragDelta">
<Thumb.Template>
<ControlTemplate>
<Image ... >
... see below ...
</Image>
</ControlTemplate>
</Thumb.Template>
</Thumb>
Run Code Online (Sandbox Code Playgroud)
另外,我将Image的Source绑定到类的属性:
<Image.Source>
<Binding Path="ImageSource" RelativeSource=
{RelativeSource FindAncestor,
AncestorType=my:MyImageControl, AncestorLevel=1}" />
</Image.Source>
Run Code Online (Sandbox Code Playgroud)
UserControl有一个名为TranslateTransform(比方说translateTransform)的属性X,Y并将在DragDelta事件处理程序中设置:
private void MyRootDragDelta(object sender, DragDeltaEventArgs e)
{
translateTransform.X += e.HorizontalChange;
translateTransform.Y += e.VerticalChange;
}
Run Code Online (Sandbox Code Playgroud)
别忘了添加:
public ImageSource ImageSource { get; set; }
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.如果有什么不清楚的话随时可以进一步询问.