PDA

View Full Version : سوال: اجرای انیمیشن در هنگام بسته شدن فرم



ahrimaneahurai
شنبه 28 اسفند 1389, 10:59 صبح
سلام
من با کد زیر می خوام پنجرم fade out بشه
اما در مورد winHelp خطا میده
private void Window_Loaded(object sender, RoutedEventArgs e)
{
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(5);
timer.Tick += timer_Tick;
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
//winHelp_Closing(sender, CancelEventArgs );
}
private void FormFadeOut_Completed(object sender, EventArgs e)
{
//closeStoryBoardCompleted = true;
this.Close();
}
private void winHelp_Closing(object sender, CancelEventArgs e)
{
if (!CloseComplete)
{
FormFadeOut.Begin();
e.Cancel = true;
}
}

جاهایی که کامنتن ایراد میگیره
منبع کد هم اینجاست : http://www.wearerighteous.com/programming/how-to-fade-in-and-out-a-window-in-wpf/

مهدی فرزاد
شنبه 28 اسفند 1389, 11:51 صبح
سلام
در این کد شما باید از یک StoryBorad برای انیمیشن fade out استفاده کنید نه از یک تایمر!!!
شما یک متغیر bool تعریف میکنید

زمانی که انیمیشن کامل میشه متغییر true میشه متد Close فراخونی میشه
اگر کاربر بدون زدن دکمه Close اقدام به بستن فرم کنه چون انیمیشنی اتفاق نیفتاده پس متغییر false هست و اجازه بستن نمیده بجاش انیمیشن رو اجرا میکنه و مجدد انیمیشن کامل میشه متغییر true میشه و متد Close فراخونی میشه



و به شما اجازه بستن فرم رو میده

درضمن برای اینکه فرم شما Fade Out بشه باید خاصیت AllowsTransparency فرمتون برابر true باشه که در این صورت شما Border اطراف فرم نخواهید داشت پس باید برای فرم استایل تعریف کنید و از Border پیشفرض ویندوز استفاده نکنید

ahrimaneahurai
شنبه 28 اسفند 1389, 11:53 صبح
ممنون دوست عزیز
StoryBorad رو توی فایل xaml تعریف کردم. و اینکه می خوام فرم بعد از 5 ثانیه fadeout شه و بعد هم بسته. توی اون لینک توضیح داده که اگه دگمه ای برای بستن ندارید از winHelp استفاده کنید.همین کد رو نوشته اما باز هم خطا میده

مهدی فرزاد
شنبه 28 اسفند 1389, 12:01 عصر
دقت کنید بله گفته اگه دکمه نیست اما بازم توی winHelp اومده StrorBord رو فراخونی کرده
کمی صبر کنید الان براتون یک نمونه میگذارم

مهدی فرزاد
شنبه 28 اسفند 1389, 12:26 عصر
سلام
اینو با دقت ببینید

کدهای توی MainWindow مربوط به Close هست

البته میشه این کدها رو در خود استایل هم نوشت (مثل انیمیشن موقع load شدن )
این لینک رو ببینید
http://barnamenevis.org/showthread.php?279004-مشکل-با-ایجاد-انیمیشن-Window-در-دیکشنری

در ضمن لطفا عنوان سئوال خود رو به شکل صحیح که بیانگر موضوع باشد بنویسید با این عنوانی که شما نوشتید هرکسی بخونه فکر میکنه سئوال در خصوص Help ویندوز هست
بهتر بود مینوشتید سئوال در خصوص اجرای انیمیشن در هنگام بسته شدن فرم
در غیر این صورت تاپیک حذف میگردد

ahrimaneahurai
یک شنبه 29 اسفند 1389, 10:52 صبح
ممنون هم بابت نمونه و هم عنوان تاپیک
فقط یه سوال شاید ابتدایی : فرم من وقتی می خواد با fadeout بسته شه سیاه میشه.محو نمیشه. در صورتی که از کدهای شما هم استفاده کردم.دلیلش استفاده شما از قالب ویندوز 7 هست یا چیز دیگه ایه ؟

مهدی فرزاد
یک شنبه 29 اسفند 1389, 11:44 صبح
من تاکید کردم که فرم شما باید خاصیت AllowsTransparency برابر true باشه
علت این هست

m.bibjan
شنبه 10 تیر 1391, 04:21 صبح
سلام ببخشید سوالم رو توی این تاپیک میپرسم
میخواستم ببینم این استایلی رو که خودتون نوشتینش رو اگه بخوام همون خاصیتی که استایل این فرم داره رو به Grid هم بدم چیکار باید بکنم ؟
فرم رو میشه شیشه ای کرد ولی توی ویندوز ایکس پی شیشه ای نیست.ولی این پروژه رو توی ویندوز ایکس پی استایلش شیشه ای هستش.
چه تغییری توی کد باید داده بشه خاصیت گرید من شیشه ای بشه؟دقیقا مثل استایل این پروژه؟

مهدی فرزاد
شنبه 10 تیر 1391, 07:48 صبح
سلام
این استایل با کد نویسی و توابع API ویندوز درست نشده برای همین توی هر محیطی شفاف هست
شما برای هر کنترلی کافیه خاصیت opacity رنگ اون رو مثلا 50 بگذارید تا شفاف بشه ( دقت کنید Opacity رنگ ، نه Opacity کنترل)
حاالا برای گرید هم فرقی نمیکنه شما رنگ بکگراند اون رو اگر با opacity زیر 100 قرار بدید اجزاریی که زیر گرید قرار بگیرن دیده میشن

m.bibjan
شنبه 10 تیر 1391, 16:13 عصر
سلام ببخشید هرکاری کردم نشد
بعد ببخشید منظورتون توی بلند بود یا ویژوال؟
من توی ویژوال هر کاری کردم نتونستم.چیکارش کنم به نظرتون؟
از جوابتون ممنونم.

مهدی فرزاد
شنبه 10 تیر 1391, 18:52 عصر
شما میخواید برای چه کاری Grid رو شفاف کنید؟

m.bibjan
شنبه 10 تیر 1391, 21:25 عصر
سلام
واسه شیشه ای شدنش.و دو علت دیگه
1 - جواب دادنش توی ویندوز ایکس پی
2- تغییر نکنه رنگش ، اگه رنگ تم ویندوز 7 تغییر کرد.
ممنون

مهدی فرزاد
یک شنبه 11 تیر 1391, 08:25 صبح
شما میخوای فرمت شییشه ای باشه؟؟؟ یا Grid؟ کدوم؟؟ نکنه منظورت اینه که پشت ویندوزت معلوم باشه؟؟؟ اگه اینه که فقط کافیه توی استایل من رنگ Border که برای بکگراند گذاشتم برداری ( الان یادم نیست اما فکر کنم Bind کردم به رنگ بکگراند ویندوز یعنی اگر رنگ بکگراد ویندوز رو بر داری درست میشه)