WPF通知

10

我该如何为我的WPF应用程序创建通知,就像在浏览器上那样,它们通过“工具栏”在浏览器顶部显示消息,或者通过弹出式“MSN”样式通知,在屏幕右下方向上/向下滑动。也许一个淡入淡出的面板在应用程序中心会有所帮助。


1
你实际上在问几个不同的问题。你想要的是应用程序窗口内的内容(例如显示弹出窗口),还是系统托盘中的内容? - Wonko the Sane
@Wonko the Sane,我想要窗口内的某些东西。 - Jiew Meng
1个回答

13

您的问题有点模糊,因为在WPF中,您的选项仅受想象力的限制。

以下是一些选项:

MessageBox
这是最简单的选项 - 如果您想用简单的消息通知用户,他必须确认才能继续,则只需在MessageBox中显示消息即可。

自定义对话框
如果MessageBox不够用,并且您想显示更多或不同类型的信息,则可以创建一个新窗口,并使用ShowDialog()方法打开它,强制用户在继续之前关闭它(确认)。

StatusBar
如果您只想传达信息,可以在对话框底部添加StatusBar。我链接了来自Kent Boogaart的一个不错的示例。请注意,StatusBar中不仅限于文本-您可以将任何UIElement添加到其中,因此可以包含图像、进度条等。

其他面板
您也可以拥有另一个面板(比如在您的应用程序顶部使用StackPanel等),其Visibility属性设置为Collapsed,除非需要它。您还可以使用一个带有一些内容的边框,在对话框中的其他UI元素前显示出来。您可以使用PopUp控件。

如果您选择“额外面板”路线(这可能听起来最符合您的要求),那么使用动画效果添加一点亮点到您的应用程序可能会很好。例如,将面板滑入到位,或者将不透明度进行动画处理等。如果您将信息放置在窗口内容之上,则还可以通过调节不透明度使面板半透明,黑暗而清晰,但同时也允许用户看到其后面的窗口的一些内容。

这里是一个非常基本的示例。我将留给用户练习添加任何格式、流畅动感的动画、处理多个信息等。

<Window ...>
    <Grid x:Name="gridMainLayout">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <StackPanel x:Name="stackNotificationArea"
                    Grid.Row="0"
                    Orientation="Horizontal"
                    Background="LemonChiffon"
                    Visibility="Collapsed">

            <TextBlock x:Name="txtMessage"
                       Text="{Binding NotificationMessage}" />
            <Button x:Name="btnAcknowledge"
                    Content="Acknowledge" />
        </StackPanel>

        <!-- Rest of your window goes here -->
        <Grid x:Name="gridContent"
              Grid.Row="1">

              <!-- Content of window -->

        </Grid>

</Window>

在上面的示例中,我假设有一个名为NotificationMessage的属性,返回最新的通知消息。您可以将其硬编码为文本或其他内容。最好根据是否有任何通知来绑定StackPanel的可见性。无论如何,您都必须根据需要切换StackPanel的可见性。将其设置为Visible将自动将窗口内容向下移动,就像您描述的那样。
请确保在确认消息时将Visibility设置为Collapsed。如果将其设置为Hidden,则不会显示StackPanel,但是仍将为其保留房地产(即应用程序顶部将出现空白空间)。
当然,您可以根据需要进行更高级的操作-您可以使用包含所有消息的小列表框,或者使用几个按钮滚动消息,或者使用按钮启动带有所有消息的窗口等。

我认为状态栏是一种方式,我认为我想要的更好的实现之一就像浏览器在阻止弹出窗口时提供的通知。我如何在WPF中实现它?我认为这是可能的,只需要一些帮助入门。我猜首先需要从窗口顶部向下滑动通知。当这发生时,最好是窗口的内容也向下滑动。我还希望通知可以以某种方式堆叠,例如当有多个通知要显示时。 - Jiew Meng
我希望通知不会打扰用户,所以对话框并不是我想要的,虽然它们很容易实现。 - Jiew Meng
我会稍微更新我的答案,让你有一个开始,但我不能为你设计整个应用程序... - Wonko the Sane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接