1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Скрыть объявление

Привет посетитель! У нас на форуме тебе откроются дополнительные разделы, которые скрыты от гостей! А так же ты найдёшь много полезной информации.

Всплывающее окно из трея C# WPF

Тема в разделе "C++ / C# / .NET", создана пользователем kick, 1 апр 2017.

Метки:
  1. kick

    kick Магистр Йода Администратор

    Регистрация:
    20 янв 2015
    Сообщения:
    4.918
    Симпатии:
    3.483
    Баллы:
    6.235
    Чтобы высчитать первоначальные координаты окна в зависимости от расположения панели задач пишем класс, который определяет местоположение трея и в зависимости от него возвращает координаты топ и лефт нашего окна которое должно выезжать, конечную точку для анимации и свойство окна к которому анимация будет применена.
    Код:
    using System;
    
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace WpfApplication1
    {
        class TrayPos
        {
            public tpos pos;
            private int top;
            private int left;
            private DependencyProperty prop;
            private int end = 0;
    
            int pw = (int)SystemParameters.PrimaryScreenWidth;
            int ph = (int)SystemParameters.PrimaryScreenHeight;
            int waw = (int)SystemParameters.WorkArea.Width;
            int wah = (int)SystemParameters.WorkArea.Height;
    
            public void getXY(int width, int height, out int _top, out int _left, out DependencyProperty _prop, out int _end)
            {
                switch(pos)
                {
                    case tpos.top:
                        left = pw - width;
                        top = (int)SystemParameters.WorkArea.Top - height;
                        prop = System.Windows.Window.TopProperty;
                        end = (int)SystemParameters.WorkArea.Top;
                        break;
                    case tpos.left:
                        left = (int)SystemParameters.WorkArea.Left - width;
                        top = ph - height;
                        prop = System.Windows.Window.LeftProperty;
                        end = (int)SystemParameters.WorkArea.Left;
                        break;
                    case tpos.right:
                        left = waw;
                        top = ph - height;
                        prop = System.Windows.Window.LeftProperty;
                        end = waw - width;
                        break;
                    case tpos.bottom:
                    default:
                        left = pw - width;
                        top = wah;
                        prop = System.Windows.Window.TopProperty;
                        end = wah - height;
                        break;
                }
    
                _left = left;
                _top = top;
                _prop = prop;
                _end = end;
    
            }
    
            public TrayPos()
            {
                if (SystemParameters.WorkArea.Top > 0)
                {
                    pos = tpos.top;
                }
                else if (SystemParameters.WorkArea.Left > 0)
                {
                    pos = tpos.left;
                }
                else if (pw > waw)
                {
                    pos = tpos.right;
                }
                else pos = tpos.bottom;
    
                MessageBox.Show(pos.ToString());
            }
        }
    }
    В конструкторе окна которое нам необходимо анимировать после InitializeComponent() ставим этот код
    Код:
                TrayPos tpos = new TrayPos();
    
                tpos.getXY((int)this.Width, (int)this.Height, out top, out left, out prop, out end);
                this.Top = top;
                this.Left = left;
                anim = new DoubleAnimation(end, TimeSpan.FromSeconds(1));
    
    Естественно необходимо в классе окна определить свойства:
    Код:
            DoubleAnimation anim;
    
            int left;
            int top;
            DependencyProperty prop;
            int end;
    
    После всех этих действий подписываемся на событие окна loaded
    Код:
            private void Window_Loaded_1(object sender, RoutedEventArgs e)
            {
                AnimationClock clock = anim.CreateClock();
                this.ApplyAnimationClock(prop, clock);
            }
    
    Все готово, теперь чтобы вызвать наше окно и увидеть эффект в основном окне на какое-нибудь событие ставим этот код
    Код:
                Window1  notify = new Window1();
                notify.Show();
    
     
Похожие темы
  1. kick
    Ответов:
    0
    Просмотров:
    393
  2. haPpy#
    Ответов:
    6
    Просмотров:
    328
  3. Atena
    Ответов:
    0
    Просмотров:
    160
  4. Winteriscoming
    Ответов:
    12
    Просмотров:
    722
Загрузка...