WPF如何实现任务栏通知

25362043 20 信誉分
2024-07-12T15:43:09.16+00:00

使用.NET8的WPF如何基于XAML和CSharp实现具有复杂用户界面的任务栏通知,并且响应事件。可以在不停驻系统托盘的情况下发送任务栏通知吗?

.NET
.NET
基于 .NET 软件框架的 Microsoft 技术。
85 个问题
Windows Presentation Foundation
Windows Presentation Foundation
.NET Framework 的一部分,它提供统一的编程模型,用于在 Windows 上构建业务线桌面应用程序。
131 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,596 信誉分 Microsoft 供应商
    2024-07-15T06:38:39.9333333+00:00

    在.NET 8的WPF中,创建一个复杂的用户界面任务栏通知,并响应事件是可以实现的。你可以使用 System.Windows.Forms.NotifyIcon 和 WPF 的相互操作来实现这一目标。下面是一个示例,展示如何基于XAML和C#实现具有复杂用户界面的任务栏通知,并响应事件。

    MainWindow.xaml:

     <StackPanel>
         <Button Content="Show Notification" HorizontalAlignment="Center" VerticalAlignment="Center" Click="ShowNotification_Click"/>
     </StackPanel>
    
    
    

    MainWindow.xaml.cs:

    using System.Windows;
    
    using Application = System.Windows.Application;
    
    namespace notification
    
    {
    
        public partial class MainWindow : Window
    
        {
    
            private NotifyIcon notifyIcon;
    
            public MainWindow()
    
            {
    
                InitializeComponent();
    
                CreateNotifyIcon();
    
            }
    
            private void CreateNotifyIcon()
    
            {
    
                notifyIcon = new NotifyIcon
    
                {
    
                    Icon = new System.Drawing.Icon("C:\\...\\d.ico"),
    
                    Visible = false,
    
                    BalloonTipTitle = "Taskbar Notification",
    
                    BalloonTipText = "This is a notification from your WPF application.",
    
                    BalloonTipIcon = ToolTipIcon.Info
    
                };
    
                notifyIcon.DoubleClick += NotifyIcon_DoubleClick;
    
                notifyIcon.BalloonTipClicked += NotifyIcon_BalloonTipClicked;
    
                notifyIcon.ContextMenuStrip = new ContextMenuStrip();
    
                notifyIcon.ContextMenuStrip.Items.Add("Show Notification", null, ShowNotification);
    
                notifyIcon.ContextMenuStrip.Items.Add("Exit", null, (s, e) => Application.Current.Shutdown());
    
               
    
            }
    
            private void NotifyIcon_DoubleClick(object sender, EventArgs e)
    
            {
    
                this.Show();
    
                this.WindowState = WindowState.Normal;
    
            }
    
            private void NotifyIcon_BalloonTipClicked(object sender, EventArgs e)
    
            {
    
                
    
                ShowNotificationWindow();
    
            }
    
            private void ShowNotification_Click(object sender, RoutedEventArgs e)
    
            {
    
                notifyIcon.Visible = true;
    
                notifyIcon.ShowBalloonTip(3000);
    
            }
    
           
    
            private void ShowNotification(object sender, EventArgs e)
    
            {
    
                ShowNotificationWindow();
    
            }
    
            private void ShowNotificationWindow()
    
            {
    
                Dispatcher.Invoke(() =>
    
                {
    
                    var notificationWindow = new NotificationWindow();
    
                    notificationWindow.Topmost = true;
    
                    notificationWindow.Show();
    
                  
    
                });
    
            }
    
            protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
    
            {
    
                notifyIcon.Dispose();
    
                base.OnClosing(e);
    
            }
    
        }
    
    }
    

    NotificationWindow:

    <Window x:Class="notification.NotificationWindow"
    
     ...
    
                 Title="Notification" Height="200" Width="300" WindowStyle="None" AllowsTransparency="True" Background="Transparent">
    
        <Grid Background="White" Margin="10" >
    
            <StackPanel>
    
                <TextBlock Text="This is a notification!" FontSize="16" Margin="10"/>
    
                <Button Content="OK" Width="75" Margin="10" Click="Button_Click"/>
    
            </StackPanel>
    
        </Grid> 
    
    </Window>
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.MessageBox.Show("show");
            this.Close();
        }
    
    
    
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。