Example #1
0
        /// <summary>
        /// این رویه مسئول پر کردن جایگاه نمایش زیر صفحه با صفحه معرفی شده است.
        /// </summary>
        /// <param name="Page">زیر صفحه یا فرزند جانشین</param>
        /// <param name="ClearStack">اگر بخواهیم زیر صفحه جایگزین کنیم پشته ی نسل قبلی باید پاک شود. اگر بخواهیم فرزند اضافه کنیم نباید پشته نسل جاری را پاک کنیم.</param>
        private void ShowPage(FormBase Page, bool ClearStack)
        {
            if (ClearStack)
            {
                PageStack.Clear();
            }

            // برای جلوگیری از کلیک های متعدد ابتدا فرم را غیر فعال میکنیم
            MainGrid.IsEnabled = false;

            Page.OnRedirectTo       -= Page_RedirectTo;
            Page.OnRedirectTo       += Page_RedirectTo;
            Page.OnShowChild        -= Page_ShowChildPage;
            Page.OnShowChild        += Page_ShowChildPage;
            Page.OnClosePageAsChild -= Page_CloseChildPage;
            Page.OnClosePageAsChild += Page_CloseChildPage;

            PageStack.Push(Page);

            // TODO: باید تمام کنترل های گرید اصلی بجز دیالوگ جدید ما غیر فعال و پس از خروج از دیالوگ فعال شوند

            var fade = new DoubleAnimation()
            {
                From     = 1,
                To       = 0,
                Duration = TimeSpan.FromMilliseconds(300),
            };

            Storyboard.SetTarget(fade, MainGrid);
            Storyboard.SetTargetProperty(fade, new PropertyPath(UIElement.OpacityProperty));

            var sb = new Storyboard();

            sb.Children.Add(fade);
            sb.Completed += (sender, e) =>
            {
                MainGrid.Children.Clear();
                MainGrid.Children.Add(Page);

                // پس از اتمام عملیات فرم را فعال میکنیم.
                MainGrid.IsEnabled = true;

                var Fade2 = new DoubleAnimation()
                {
                    From     = 0,
                    To       = 1,
                    Duration = TimeSpan.FromMilliseconds(300),
                };

                Storyboard.SetTarget(Fade2, MainGrid);
                Storyboard.SetTargetProperty(Fade2, new PropertyPath(UIElement.OpacityProperty));

                var Sb2 = new Storyboard();
                Sb2.Children.Add(Fade2);
                Sb2.Begin();
            };
            sb.Begin();
        }
Example #2
0
 /// <summary>
 /// هرگاه یک زیر صفحه از جنس فرزند بسته شود باید از پشته حذف شود و زیر صفحه پیشین جایگزین شود.
 /// </summary>
 /// <param name="DialogPage">فرزند بسته شده</param>
 /// <param name="Result">نتیجه اجرای فرزند</param>
 private void Page_CloseChildPage(FormBase DialogPage, PageResult Result)
 {
     if (PageStack != null)
     {
         if (PageStack.Count > 0)
         {
             var Page = PageStack.Pop();
             ShowPage(PageStack.Peek(), false);
         }
     }
 }
Example #3
0
 /// <summary>
 /// هرگاه صفحه اصلی بخواهد در نظم نمایش صفحات دست ببرد از این متد استفاده میکند.
 /// </summary>
 /// <param name="TargetPage">زیر صفحه مقصد</param>
 public void RedirectPage(FormBase TargetPage)
 {
     ShowPage(TargetPage, true);
 }
Example #4
0
 /// <summary>
 /// هر گاه یک زیر صفحه بخواهد به کار خود خاتمه دهد و با زیر صفحه ی دیگری جایگزین شود این رویداد را فراخوانی میکند
 /// </summary>
 /// <param name="Page">زیر صفحه مقصد</param>
 private void Page_RedirectTo(FormBase Page)
 {
     ShowPage(Page, true);
 }
Example #5
0
 /// <summary>
 /// برای نمایش فرزند؛ زیر صفحات این رویداد را فراخوانی میکنند.
 /// </summary>
 /// <param name="Page">فرزند نسل بعدی</param>
 private void Page_ShowChildPage(FormBase Page)
 {
     Page.IsChild = true;
     ShowPage(Page, false);
 }
Example #6
0
 /// <summary>
 /// صفحاتی که در آنها خاصیت
 /// IsChild = True
 /// است باید این رخداد را در محل مناسب فراخوانی کنند.
 /// برای اینکه بتوانیم در کلاس های فرزند این رویداد تحریک کنیم این متد را طراحی کردیم
 /// </summary>
 /// <param name="Page">صفحه جاری</param>
 /// <param name="Result">نتیجه صفحه</param>
 public void ClosePageAsChild(FormBase Page, PageResult Result)
 {
     OnClosePageAsChild?.Invoke(Page, Result);
 }
Example #7
0
 /// <summary>
 /// برای نمایش یک زیر صفحه از جنس فرزند از این رویداد استفاده میشود
 /// برای اینکه بتوانیم در کلاس های فرزند این رویداد تحریک کنیم این متد را طراحی کردیم
 /// </summary>
 /// <param name="Page">صفحه فرزند</param>
 public void ShowChild(FormBase Page)
 {
     OnShowChild?.Invoke(Page);
 }
Example #8
0
 /// <summary>
 /// با فراخوانی این رویداد هر زیر صفحه میتواند فرمان هدایت به زیر صفحه ی دیگر را به مدیر صفحات ارسال کند
 /// برای اینکه بتوانیم در کلاس های فرزند این رویداد تحریک کنیم این متد را طراحی کردیم
 /// </summary>
 /// <param name="Page">صفحه ای که میخواهیم به آن منتقل شویم.</param>
 public void RedirectTo(FormBase Page)
 {
     OnRedirectTo?.Invoke(Page);
 }