Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF иконка в трэй, Помещение иконки в трэй 
:(
    Опции темы
Человек01
Дата 25.2.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Решил сделать пост, после того как мой жружище долго и упорно пытался поместить иконку в этот самый трэй.
Оказывается что в WPF проделать этого нельзя, по крайней мере, я так и не нашел (Если кто знает делитесь).
Но вот можно использовать Windows Forms функции, и это щас мы проделаем.
Прежде чем набирать(использовать) код требуется в наше WPF приложение добавить References:
Цитата

System.Windows.Forms.dll
System.Drawing.dll


А далее идет код:
.xaml
Код

<Window x:Class="WpfApplication4.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Width="300" Height="400"
        Title="Наше приложение"
        StateChanged="OnStateChanged"
        IsVisibleChanged="OnIsVisibleChanged"
        Closing="Window_Closing"> 
</Window>


и собственно сам xaml.cs
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication4
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        private System.Windows.Forms.NotifyIcon m_notifyIcon;
        public Window1()
        {
            InitializeComponent();
            m_notifyIcon = new System.Windows.Forms.NotifyIcon();
            m_notifyIcon.BalloonTipTitle = "Зоголовок сообщения";
            m_notifyIcon.BalloonTipText = "Появляется когда мы помещаем иконку в трэй";
            
            m_notifyIcon.Text = "Это у нас пишется если мы наведем мышку на нашу иконку в трэее";
            m_notifyIcon.Icon = new System.Drawing.Icon(@"c:\hm.ico");
            m_notifyIcon.Click += new EventHandler(m_notifyIcon_Click);
        }

       
        private WindowState m_storedWindowState = WindowState.Normal;
        void OnStateChanged(object sender, EventArgs args)
        {
            if (WindowState == WindowState.Minimized)
            {
                Hide();
                if (m_notifyIcon != null)
                    m_notifyIcon.ShowBalloonTip(2000);
            }
            else
                m_storedWindowState = WindowState;
        }
        void OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs args)
        {
            CheckTrayIcon();
        }

        void m_notifyIcon_Click(object sender, EventArgs e)
        {
            Show();
            WindowState = m_storedWindowState;
        }
        void CheckTrayIcon()
        {
            ShowTrayIcon(!IsVisible);
        }

        void ShowTrayIcon(bool show)
        {
            if (m_notifyIcon != null)
                m_notifyIcon.Visible = show;
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            m_notifyIcon.Dispose();
            m_notifyIcon = null;
        }
    }
}

ах да чуть не забыл требуется разместить в корне "c:" диска файлик с иконкой и назвать его "hm.ico" ну это видно из кода  smile 
компилируем и запускаем в итоге при сворачивании в трэе появляется наша иконка  smile 
Я тут нечаго сам не придумывал, просто локализовал орегинальное сообщение Блог Join Them 
Пользуемся и говорим Человеку спасибо

Это сообщение отредактировал(а) Человек01 - 25.2.2009, 17:14
PM MAIL ICQ   Вверх
Partizan
Дата 25.2.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Человек01, Молодец, что выложил сюда решение  smile  Может пригодиться кому-нибудь   smile 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
pipn
Дата 11.3.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.3.2009

Репутация: нет
Всего: нет



Цитата

 .человек. помогал мне ему огромное спасибо 

вот еще  выкладываю как к этой иконке привезать контекстное меню
Код

  public partial class Window1 : Window
    {   
        private System.Windows.Forms.NotifyIcon m_notifyIcon;
        private Icon m_icon;
        private System.Windows.Forms.ContextMenu contextMenu1;//это само контекстное меню
        private System.Windows.Forms.MenuItem menuItem1;//это строки в контекстном меню
        private System.Windows.Forms.MenuItem menuItem2;
       .
       .
       .
contextMenu1 = new System.Windows.Forms.ContextMenu();
            menuItem1 = new System.Windows.Forms.MenuItem();
            menuItem2 = new System.Windows.Forms.MenuItem();
            //инициируем контекстное меню
            contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { menuItem1 });
            contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { menuItem2 });
            menuItem1.Index = 0;
            menuItem1.Text = "Выход";
            menuItem1.Click += new EventHandler(menuItem1_Click);
          
            menuItem2.Index = 1;//'это каким будет отображаться
            menuItem2.Text = "Выбрать чтото";
            menuItem2.Click += new EventHandler(menuItem2_Click);
             .
             .
             .
             m_notifyIcon = new System.Windows.Forms.NotifyIcon();
             .
             .
             . 
             m_notifyIcon.ContextMenu = contextMenu1; //привязываем контекстное меню к иконке в     трее                   
            InitializeComponent();

             .
             .
             .  
         //процедурки контекстного меню
         private void menuItem1_Click(object Sender, EventArgs e)
        {
            // закрываем форму
            Close();
        }
        private void menuItem2_Click(object Sender, EventArgs e)
        {
            comboBox1.Visibility = System.Windows.Visibility.Visible;
            label1.Visibility = System.Windows.Visibility.Visible;
            listBox1.Visibility = System.Windows.Visibility.Hidden;
        }

 код не полностью но основной принцып понятен
думаю комунибудь пригодится 
а человеку огромное спасибо за точто направил в нужное русло
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.