View Full Version : جابه جایی UserControl روی فرم
PetekDincos
دوشنبه 20 دی 1389, 22:12 عصر
با سلام
من چندتا UserControl دارم که می خوام اون ها رو روی فرم بتونم جابه جا کنم مثل Gadget ها با تشکر
مهدی فرزاد
دوشنبه 20 دی 1389, 23:23 عصر
سلام
اگر منظور شما حرکت دادن با موس هست این بهترین مثالی بود که من دیدم
http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx
فایل مثالش هم توی همون لینک هست
مهدی فرزاد
سه شنبه 21 دی 1389, 08:35 صبح
سلام
من دیشب خودم یک نمونه ساده تر رو درست کردم یه نگاهی بهش بکنید
نکته اول باید اون کنترلی که میخوای حرکتش بدید در یک Canvas قرار بگیره برای مثال من یک UserControl به شکل زیر توی Canvas قرار دادم(کنترل فقط در محیط Canvas حرکت میکنه پس چون من میخواستم بتونم توی تمام صفحه حرکتش بدم Canvas رو Strech کردم تو کل صفحه)
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:my="clr-namespace:WpfApplication1">
<Grid>
<Canvas x:Name="Mycanvas" >
<my:UserControl1 x:Name="MyUserControl" Width="100" Height="100" Canvas.Left="0" Canvas.Top="0" MouseDown="MyUserControl_MouseDown" MouseMove="MyUserControl_MouseMove" MouseUp="MyUserControl_MouseUp"></my:UserControl1>
</Canvas>
</Grid>
</Window>
حالا کد های زیر رو بنویس
Point p;
privatevoid MyUserControl_MouseDown(object sender, MouseButtonEventArgs e)
{
this.MyUserControl.CaptureMouse();
p = e.GetPosition(this.Mycanvas);
}
privatevoid MyUserControl_MouseMove(object sender, MouseEventArgs e)
{
Point x = e.GetPosition(this.Mycanvas);
if (e.LeftButton == MouseButtonState.Pressed)
{
Canvas.SetLeft(this.MyUserControl, Canvas.GetLeft(this.MyUserControl) + (x.X - p.X));
Canvas.SetTop(this.MyUserControl, Canvas.GetTop(this.MyUserControl) + (x.Y - p.Y));
}
p = x;
}
privatevoid MyUserControl_MouseUp(object sender, MouseButtonEventArgs e)
{
this.MyUserControl.ReleaseMouseCapture();
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.