View Full Version : سوال: جابه جایی عکس به وسیله ماوس
zeous1
شنبه 28 مرداد 1391, 00:11 صبح
درود به همه دوستان
میخوام کدی بنویسم که کاربر با کلیک چپ کردن روی عکس و نگه داشتن، عکس رو درگ کنه ( کاربر بتونه با ماوس عکس رو به هر نقطه ای از صفحه منتقل کنه)
البته یه گرید با اندازه ثابت دارم که اگر عکس از کادر بیشتر رفت اون قسمتی که بیرون از کادر هست رو نمایش نمیده،
برای طراحی از گرید استفاده کردم و با margin جابه جاش کردم که کار خیلی افتضاحیه (چون نمیدونستم که چطور موقعیت عکس رو با x , y جابه جا کنم که البته الانم نمیدونم)
و بعد جاهایی خوندم که با canvas این کار رو انجام بدم،
انجام دادم ولی نتیجه ش این بود که اگر عکس از کادر هم بیرون بره هیچ عکس العملی نشون نمیده،
و با ترکیبی از canvas و grid انجام دادم ولی دیگه نمیتونستم عکس رو جابه جا کنم!
دوستان، اگه راه دیگه ای غیر از Canvas وجود داره ممنون میشم راهنماییم کنید وگرنه مشکلم در استفاده از canvas بهم بگید
zeous1
شنبه 28 مرداد 1391, 00:22 صبح
کدی هم که به کار بردم اینا هستن،
برای XAML :
<Grid>
<TextBlock Name="aaa" HorizontalAlignment="Left" VerticalAlignment="Center">aaaa</TextBlock>
<Image Source="D:\Pics\Background1.jpg"></Image>
<Grid x:Name="GridPanel" HorizontalAlignment="Center" VerticalAlignment="Center" Height="300" Width="300" MouseDown="GridPanel_MouseDown" MouseMove="GridPanel_MouseMove" MouseUp="GridPanel_MouseUp" MouseLeave="GridPanel_MouseLeave">
<Image x:Name="BackGroundImage" Source="D:\Pics\BackGround2.jpg"></Image>
<Canvas x:Name="DesktopCanvas">
<UniformGrid x:Name="AppGrid" Columns="3" Rows="5" Height="500" Width="300" VerticalAlignment="Top" HorizontalAlignment="Center">
<Grid x:Name="Grid_1" Height="100" Width="100">
<Image x:Name="Image_1" Source="D:\add_folder.png"></Image>
</Grid>
<Grid x:Name="Grid_2" Height="100" Width="100">
<Image x:Name="Image_2" Source="D:\hitchhikeguidetogalaxy3_add.png"></Image>
</Grid>
<Grid x:Name="Grid_3" Height="100" Width="100">
<Image x:Name="Image_3" Source="D:\user_group_new.png"></Image>
</Grid>
<Grid x:Name="Grid_4" Height="100" Width="100">
<Image x:Name="Image_4" Source="D:\add_user1.png"></Image>
</Grid>
<Grid x:Name="Grid_5" Height="100" Width="100">
<Image x:Name="Image_5" Source="D:\Add1.png"></Image>
</Grid>
<Grid x:Name="Grid_6" Height="100" Width="100">
<Image x:Name="Image_6" Source="D:\add_user.png"></Image>
</Grid>
<Grid x:Name="Grid_7" Height="100" Width="100">
<Image x:Name="Image_7" Source="D:\add_folder.png"></Image>
</Grid>
<Grid x:Name="Grid_8" Height="100" Width="100">
<Image x:Name="Image_8" Source="D:\add3.png"></Image>
</Grid>
<Grid x:Name="Grid_9" Height="100" Width="100">
<Image x:Name="Image_9" Source="D:\user_add.png"></Image>
</Grid>
<Grid x:Name="Grid_10" Height="100" Width="100">
<Image x:Name="Image_10" Source="D:\user_group_new.png"></Image>
</Grid>
<Grid x:Name="Grid_11" Height="100" Width="100">
<Image x:Name="Image_11" Source="D:\add_folder.png"></Image>
</Grid>
<Grid x:Name="Grid_12" Height="100" Width="100">
<Image x:Name="Image_12" Source="D:\add_folder.png"></Image>
</Grid>
<Grid x:Name="Grid_13" Height="100" Width="100">
<Image x:Name="Image_13" Source="D:\user_add.png"></Image>
</Grid>
<Grid x:Name="Grid_14" Height="100" Width="100">
<Image x:Name="Image_14" Source="D:\add_folder.png"></Image>
</Grid>
<Grid x:Name="Grid_15" Height="100" Width="100">
<Image x:Name="Image_15" Source="D:\icon\user_group_new.png"></Image>
</Grid>
</UniformGrid>
</Canvas>
</Grid>
</Grid>
و برای قسمت کدنویسی:
public partial class Window1 : Window
{
double yDown = 0;
double yUp = 0;
double xDown = 0;
double xUp = 0;
double locationY = 0;
public Window1()
{
InitializeComponent();
}
string basename;
private void GridPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
yDown = Mouse.GetPosition(GridPanel).Y;
xDown = Mouse.GetPosition(GridPanel).X;
aaa.Text = "X: " + xDown + " , Y: " + yDown;
}
private void GridPanel_MouseMove(object sender, MouseEventArgs e)
{
if (xDown != 0)
{
yUp = Mouse.GetPosition(GridPanel).Y;
xUp = Mouse.GetPosition(GridPanel).X;
Canvas.SetTop(AppGrid, (yUp - yDown) + locationY);
}
}
private void GridPanel_MouseUp(object sender, MouseButtonEventArgs e)
{
xDown = 0;
locationY += (yUp - yDown));
}
locationY += m;
aaa.Text = "X: " + xUp + " , Y: " + yUp;
}
private void GridPanel_MouseLeave(object sender, MouseEventArgs e)
{
xDown = 0;
}
}
hamidreza20
شنبه 28 مرداد 1391, 03:22 صبح
سلام دوست عزیز
سورس برنامه رو بزار به همراه عکس ها
برات درست کنم
اینطور که من متوجه شدم یکسری عکس به صورت آیکون داری و می خوای جای اونها رو عوض کنی....
راه های زیادی وجود داره ....
سورس رو بزار یا ایمیل کن
یاحق
zeous1
شنبه 28 مرداد 1391, 10:59 صبح
شما دقت کردین که توی گوشیایی مثل آیفون، آیکن چندین برنامه وجود داره که با لمس تاچ و تکون دادن اون همه ی اونها با هم بالا و پایین میرن، کاری که در کل میخوام انجام بدم همینه که کاربر این آیکن هارو بالا پایین میکنه و یکی رو انتخاب میکنه و بنا به انتخابش عملیات مورد نظر صورت میگیره، اون کدی هم که گذاشتم برای همین قسمتیه که عکس بالا پایین میشه، اگر دو قسمت کد و XAML رو به صورت کامل کپی کنی اون کار رو انجام میده، ولی مشکلی که من دارم اینه که آیکنها به صورت کامل توی صفحه بالا و پایین میرن، برای اینکه بیشتر منظورم رو متوجه بشی، قسمت Canvas رو از XAML به کل حذف کن
( منظورم اینه که کد:
<Canvas x:Name="DesktopCanvas">
و
</Canvas>
رو حذف کن) اون چیزی که من میخوام انجام بشه به دست میاد، یعنی تصاویر بیرون کادر حذف میشن، ولی دیگه نمیتونم به وسیله canvas مکان عکس رو تغییر بدم! اگه روشی باشه که بدون اون و با استفاده از (X,Y) بتونم عکس رو جابه جا کنم خیلی عالی میشه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.