虽然我在Forms中有一些经验,但我还是WPF的新手,我决定最终尝试弄清楚如何使用WPF。所以,当我得到可拖动的控件时,这就是我想出的代码(我试图改变它以使用WPF,但控件只是抽搐到处):
private void rectangle1_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed) {
double x = this.Left + (double)e.GetPosition(this).X - (double)rectangle1.Margin.Left;
double y = this.Top + (double)e.GetPosition(this).Y - (double)rectangle1.Margin.Top;
rectangle1.Margin = new Thickness(x, y, rectangle1.Margin.Right, rectangle1.Margin.Bottom);
}
}
答案 0 :(得分:4)
您希望使用adorners来实现拖动,调整大小,旋转等等。
答案 1 :(得分:1)
如果您想手动使用以下算法:
MouseDown
事件:保存鼠标位置,控制器的TopLeft位置以及这些坐标的delta(偏移),并设置一些布尔字段标志,例如。 IsDragStartted
为真。在MouseMove
上检查拖动是否已开始并使用鼠标位置和偏移量来计算控制 TopLeft位置的新值
在MouseUp
事件集IsDragStartted
上设置为false
答案 2 :(得分:1)
here是关于MSDN问题的一篇非常好的文章。此外,快速搜索谷歌揭示了一个真正的聚宝盆选择为你DnD用餐乐趣。
答案 3 :(得分:0)
替代方案:
Microsoft.Xaml.Behaviors.Wpf
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
<Grid>
<behaviors:Interaction.Behaviors>
<behaviors:MouseDragElementBehavior ConstrainToParentBounds="True"/>
</behaviors:Interaction.Behaviors>
</Grid>