【C#/WPF】用Thumb做可拖拽的UI控件
原文:【C#/WPF】用Thumb做可拖拽的UI控件
需求:简单的可拖拽的图片
使用System.Windows.Controls.Primitives.Thumb类
前台:
<Canvas x:Name="g"><Thumb Canvas.Left="10" Canvas.Top="20" Canvas.ZIndex="99" DragDelta="Thumb_DragDelta"><Thumb.Template><ControlTemplate><Image Width="60" Height="60" Source="你的图片路径"/></ControlTemplate></Thumb.Template></Thumb>
</Canvas>
后台:
private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{UIElement thumb = e.Source as UIElement;// 防止Thumb控件被拖出容器。 // if (nTop <= 0)// nTop = 0;// if (nTop >= (g.Height - myThumb.Height))// nTop = g.Height - myThumb.Height;// if (nLeft <= 0)// nLeft = 0;// if (nLeft >= (g.Width - myThumb.Width))// nLeft = g.Width - myThumb.Width;// Canvas.SetTop(myThumb, nTop);// Canvas.SetLeft(myThumb, nLeft);// tt.Text = "Top:" + nTop.ToString() + "\nLeft:" + nLeft.ToString();Canvas.SetLeft(thumb, Canvas.GetLeft(thumb) + e.HorizontalChange);Canvas.SetTop(thumb, Canvas.GetTop(thumb) + e.VerticalChange);
}
坑点:
- Thumb必须是一个Canvas的子类,因为它依赖该Canvas来定位。
- Thumb必须协商Canvas.Left和Canvas.Top,因为它依赖该Vanvas来定位,否则无法拖动!
重要的参考:
- https://wpf.2000things.com/2012/12/19/715-using-the-thumb-control-to-drag-objects-on-a-canvas/
- https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb(v=vs.110).aspx
posted on 2018-08-14 11:20 NET未来之路 阅读(...) 评论(...) 编辑 收藏