WPF 通知

标签 wpf

如何为我的 WPF 应用程序创建通知,例如浏览器上的通知,它们通过浏览器顶部的“工具栏”显示消息或通过在右下角向上/向下滑动的弹出窗口显示“MSN”样式通知屏幕。也许在应用程序中心淡入/淡出的面板可以

最佳答案

您的问题有点含糊,因为使用 WPF,您的选择实际上只受您的想象力的限制。

以下是一些选项:
消息框
这是最简单的选项 - 如果您想通过一条简单的消息通知您的用户,他必须确认才能继续,那么只需在 MessageBox 中显示一条消息。 .

滚动你自己的对话
如果 MessageBox 没有做到这一点,并且您想显示更多或不同种类的信息,那么您可以简单地创建一个新窗口,然后使用 ShowDialog() 打开它。方法,强制用户在继续之前关闭它(确认它)。

状态栏
如果您只是想传达信息,您可以添加 StatusBar到对话框的底部。我已经链接到来自 SO'er Kent Boogaart 的一个很好的例子.请注意,您不仅限于 StatusBar 中的文本 - 您可以向其中添加任何 UIElement,因此您可以拥有图像、进度条等。

其他一些面板
除非需要,否则您还可以拥有另一个将 Visibility 设置为 Collapsed 的某种面板(使用您的示例,StackPanel 或应用程序顶部的其他东西)。例如,您还可以有一个包含一些内容的 Border,它显示在对话框中其余 UIElement 的前面。您可以使用 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 的属性返回最新的通知消息。您可以将其硬编码为文本或其他任何内容。根据是否有任何通知,最好也绑定(bind) StackPanel 的 Visibility。在任何情况下,您都必须根据需要将 StackPanel 切换为可见。如您所述,将其设置为可见将自动向下移动窗口的内容。

确认消息后,请务必将 Visibility 设置为 Collapsed。如果将其设置为隐藏,则不会显示 StackPanel,但仍会为其保留空间(即应用程序顶部将有一个空白区域)。

当然,您可以随心所欲地在这里 - 您可以有一个包含所有消息的小列表框,或者几个按钮来滚动消息,或者一个按钮来启动一个包含所有消息的窗口,或者.. .

关于WPF 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088465/

相关文章:

c# - 动态分配时,ObservableCollection 刷新不起作用

wpf - 停止 WPF ScrollViewer 自动滚动到感知的内容

c# - DispatcherTimer 的绑定(bind)不在 View 上显示它的值

c# - 更新/使用来自另一个 ViewModel 的变量

WPF - 动画图像源更改

wpf - 样式化 WPF 弹出窗口(就像 iTunes 的弹出窗口一样)

c# - 使用 EventAggregator 和 ViewModel 注册类型

C# WPF 文件保存遇到异常

c# - 将零值格式化为空字符串?

c# - UserControl 如何判断它何时可见