PDA

View Full Version : جابجا شدن آیتم هام حتی پس از استفاده از Canvas



arefba
دوشنبه 02 خرداد 1390, 04:27 صبح
من یه فرم دارم با رزولیشن ثابت 1600 در 900 و یه Canvas با همین رزولیشن اما وقتی یه ایمیج رو روش میزارم جاش عوض میشه

چیکار باید بکنم من باید جاشون برام ثابت باشن

مهدی فرزاد
دوشنبه 02 خرداد 1390, 09:19 صبح
سلام
اگر امکان داره کد Canvas رو قرار بدید تا طریقه چیدمان شما رو بررسی کنیم(اگر canvas درون Panel دیگه ای مثل Grid یا ..... قرار داره با کد اون Panel کامل اینجا قرار بدید)

arefba
دوشنبه 02 خرداد 1390, 14:31 عصر
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="900" Width="1600" AllowsTransparency="True" WindowStartupLocation="CenterScreen" WindowStyle="None">
<Window.Background>
<ImageBrush TileMode="None" ImageSource="F:\f1\Untitled-010.jpg" />
</Window.Background>
<Canvas Height="900" Name="canvas1" Width="1600">
<Image Canvas.Left="133.32" Canvas.Top="207.757" Height="445.511" Name="image1" Stretch="Fill" Width="191.092" Source="file:///F:/f1/Panel 1.png" ImageFailed="image1_ImageFailed" />
</Canvas>
</Window>




و یه چیز دیگه اونم اینکه این page هست که توی add وجود داره میشه یه کم در موردش توضیح بدید

مهدی فرزاد
دوشنبه 02 خرداد 1390, 15:46 عصر
سلام
من کد شما رو تست کردم کردم و مشکلی درش ندیدم احتمالا تنظیمات دیگه ای در برنامه شما این مشکل رو ایجاد میکنه اما شما میتونید با استفاده از Grid هم این کار رو انجام بدید به این شکل که در گرید 2 تا ستون ایجاد کنید و ستونی رو که نمیخواید با تغییر ابعاد ، تغییر کنه ، به شکل زیر تعریف کنید
<ColumnDefinition Width="298"/>

و هم چنین باید دو تا سطر هم بهش اضافه کنید و اون سطری ر. که نمیخواید جا بجا بشه مانند ستون بالایی تعریف کنید
حالا کنترل Image رو درون این سطر و ستون مورد نظر تعریف کنید
کد زیر رو جای کد Canvas برنامه بگذارید و ببینید نتیجه چی میشه
<Grid x:Name="Grid" >
<Grid.RowDefinitions>
<RowDefinition Height="205"/>
<RowDefinition Height="450.104"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="184"/>
<ColumnDefinition Width="178"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image x:Name="image1" Stretch="Fill" Source="file:///F:/f1/Panel 1.png" Grid.Row="1" Grid.Column="1" />
</Grid>

دقت کنید من به Image طول و عرض ندادم و در Grid قرار دادم

در خصوص Page این لینک (http://msdn.microsoft.com/en-us/library/ms750478.aspx)رو مطالعه کنید

arefba
دوشنبه 02 خرداد 1390, 23:48 عصر
جاش عوض میشه میره به سمت بالا نمیدونم چرا

arefba
دوشنبه 02 خرداد 1390, 23:57 عصر
ببینید من یه بک گراوند دارم که چند تا آیکن ثابت روشه من نمی خوام آیکن ها رو از روش بر دارم
من پی ان جی اون آیکن ها رو دارم میخوام تو همون نقاط توی فرم بزام روش تنظیم که می کنم برنامه ران میشه جاشون عوض میشه
من توی اپلیکیشن یه ایمیج رو با بک گراوند ترنسپرنت میذاشتم روی آیکن و از اون به بعد می تونستم برای اون محدوده رویدادی تعریف کرد .
توی wpf نمیشه وقتی عکس هیچی توش نباشه ایمیج رو نمایش نمیده شما رراهی رو دارید بگید

ممنونم که پاسخ میدید

مهدی فرزاد
سه شنبه 03 خرداد 1390, 00:16 صبح
کدی رو که من دادم روی برنامه ای تست کردم و جای Image تغییر نکرد، کد فرم شما دقیق مثل همینی هست که داده بودید؟؟ جایش رو تغییر ندادید؟

راستی یک نکته من تنظیمات سطر و ستون ها رو همینجوری انجام دادم شما ارتفاع و عرض ستون ها رو جوری تنظیم کنید که با کارتون منطبق باشه و عکس ها در محل مناسب قرار بگیره بعد برنامه رو اجرا کنید (اگر با Blend این کار رو انجام بدید بهتره)
من متوجه تیکه آخر نوشتتون نشدم

توی wpf نمیشه وقتی عکس هیچی توش نباشه ایمیج رو نمایش نمیده شما رراهی رو دارید بگید من دقیق نمیدونم برای چی دارین این کار رو میکنین و چی تو ذهنتون هست ؟ شاید دارید لقمه رو دور سرتون می پیچونید
من پیشنهاد میکنم فایل برنامه رو حداقل فقط همین فرم رو در برنامه بگذارید تا بتونم کمک کنم
قدرت طراحی WPF خیلی بالاست و نیازی به این گونه کار ها با عکس و Image و ... نیست
من درست درک نکردم جریان چیه

arefba
سه شنبه 03 خرداد 1390, 00:31 صبح
بله بدون تغییر اما نشد
ببینید من تو اپلیکیش یه ایمیج رو به فرمم اضافه می کردم هیچ عکسی رو توش نمیذاشتم و خاصیت بک گراوند کالر رو ترنس پرنت میذاشتم اون رو روی یه قسمت از بک گروند فرمم میذاشتم تا وقتی روی اون قسمت ایونتی اتفاق افتاد من براش کد بنویسم
حالا میشه این کار رو تو wpf کرد
چجوری

مهدی فرزاد
سه شنبه 03 خرداد 1390, 00:42 صبح
شما می تونید بجای Image یک Border بگذارید و opacity رنگ بکگراند رو صفر کنید و بعد اونو با استفاده از Grid و یا همین Canvas در جای مناسب بگذارید و برای رویداد کلیک اون کد بنویسید ( نکته مهم اینه که اگر به بکگراند Border رنگ ندید کار نمیکنه باید رنگ بدید ولی Opacity رنگ رو صفر کنید )

گفتم اگر یک نمونه از فرموتون رو اینجا قرار بدید میتونم براتون اصلاح کنم تا نتیجه رو ببینید اگر هم مایلید به ایمل من ارسال کنید

arefba
سه شنبه 03 خرداد 1390, 00:46 صبح
ببخشید یه خورده کار محرمانست
مجبور شدم ببرم تو wpf
بازم ممنون
میرم چک کنم

مهدی فرزاد
سه شنبه 03 خرداد 1390, 01:04 صبح
من خودم یک نمونه براتون گذاشتم ببینید
بجای Border از Ellipse استفاده کردم تا گرد باشه آخه اون آیکونی که Ellipse روش قرار دادم گرده در ضمن تمام سطر و ستون های گرید رو * دار نوشتم چون میخواستم با تغییر اندازه فرم این کنترل هن هم اندازه اون آیکون سبز بزرگ بشه
رنگ بکگراند Ellipse رو مشکی ولی کم رنگ گذاشتم و یک بودر قرمز هم دورش گذاشتم تا محلش دقیقا مشخص باشه
شما سایز فرم رو تغییر بدید نتیجه رو ببینید و هم چنین روش کلیک کنید

arefba
سه شنبه 03 خرداد 1390, 01:06 صبح
نگاه کنید
این قبل از اجراست
http://arefvasara.persiangig.com/audio/0.jpg
و اینم بعدش
http://arefvasara.persiangig.com/audio/1.jpg

مهدی فرزاد
سه شنبه 03 خرداد 1390, 01:13 صبح
فایل ضمیمه منو ببینید
شما باید گرید خیلی دقیق تنظیم کنید من در شکل میبینم که سطر های گرید از بالا و پایین دقیقا روی عکس ها ست نشده
روی تنظیمات باید کار کنید روشی رو که در فایل ضمیه بکار بردم امتحان کنید

arefba
سه شنبه 03 خرداد 1390, 01:34 صبح
ممنون تقریبا درست شد
خیلی واسه راهنمایی هاتون مچکرم
خدا خیرتون بده
بای