PDA

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();
}