WPF:为什么消息框标题栏上没有图标

2024-01-08

我想要的只是我的消息框应该在其标题栏中显示我的应用程序的图标(或任何其他图标),但它没有,为什么不呢?


The MessageBox in WPF http://msdn.microsoft.com/en-us/library/system.windows.messagebox(v=VS.100).aspx只是标准的包装MessageBox in user32.dll http://msdn.microsoft.com/en-us/library/ms645505(VS.85).aspx,这与 Windows 本身调用的显示对话框的函数完全相同。它在 WPF 应用程序中与在依赖 Win32 API(包括 WinForms、MFC 等)的任何其他应用程序中看起来没有任何不同。

使用 Reflector,您可以通过查看调用的相关函数来验证这一点MessageBox在 WPF 中。特别注意最后一行代码,它调用的地方UnsafeNativeMethods.MessageBox:

[SecurityCritical]
private static MessageBoxResult ShowCore(IntPtr owner, string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, MessageBoxOptions options)
{
    if (!IsValidMessageBoxButton(button))
    {
        throw new InvalidEnumArgumentException("button", (int) button, typeof(MessageBoxButton));
    }
    if (!IsValidMessageBoxImage(icon))
    {
        throw new InvalidEnumArgumentException("icon", (int) icon, typeof(MessageBoxImage));
    }
    if (!IsValidMessageBoxResult(defaultResult))
    {
        throw new InvalidEnumArgumentException("defaultResult", (int) defaultResult, typeof(MessageBoxResult));
    }
    if (!IsValidMessageBoxOptions(options))
    {
        throw new InvalidEnumArgumentException("options", (int) options, typeof(MessageBoxOptions));
    }
    if ((owner != IntPtr.Zero) && ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != MessageBoxOptions.None))
    {
        throw new ArgumentException(SR.Get(SRID.CantShowMBServiceWithOwner, new object[0]));
    }
    int type = (int) (((button | ((MessageBoxButton) ((int) icon))) | DefaultResultToButtonNumber(defaultResult, button)) | ((MessageBoxButton) ((int) options)));
    IntPtr zero = IntPtr.Zero;
    if ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == MessageBoxOptions.None)
    {
        if (owner == IntPtr.Zero)
        {
            zero = UnsafeNativeMethods.GetActiveWindow();
        }
        else
        {
            zero = owner;
        }
    }
    return Win32ToMessageBoxResult(UnsafeNativeMethods.MessageBox(new HandleRef(null, zero), messageBoxText, caption, type));
}

正如您所注意到的,此消息框的标题栏上不显示图标。这是因为它的窗口是在没有指定的情况下创建的WS_CAPTION and WS_SYSMENU风格。和虽然可能 http://msdn.microsoft.com/en-us/magazine/cc188920.aspx,没有简单的方法来子类化 user32.dll 提供的MessageBox and 更改其窗口样式 http://support.microsoft.com/kb/179582在其标题栏上显示一个图标。生成的代码很丑陋,坦率地说,不值得这么麻烦。

最好的解决方案是简单地创建您自己的对话框并从您的代码中调用此对话框。除了添加图标的能力之外,这还有很多其他优点,包括修复与 WPF 的任何互操作性问题(您将使用完全托管的代码),并允许您根据需要对对话框进行主题化以匹配应用程序中使用的自定义主题。尝试这样的事情来帮助您入门。

  • http://blogsprajeesh.blogspot.com/2009/12/wpf-messagebox-custom-control.html http://blogsprajeesh.blogspot.com/2009/12/wpf-messagebox-custom-control.html


或者,如果您不需要针对以前版本的 Windows(Vista 之前的版本),您可以使用TaskDialog http://msdn.microsoft.com/en-us/library/bb787471(VS.85).aspxCOMCTRL32.DLL 版本 6 中提供,它取代并增强了标准MessageBox。但是,它并未作为标准类包含在 .NET Framework 中,因此您必须P/Invoke http://www.pinvoke.net/default.aspx/comctl32.taskdialog. See here http://community.bartdesmet.net/blogs/bart/archive/2006/09/26/4470.aspx对于许多可用的示例之一。

还有一些值得研究的示例项目,它们利用了TaskDialog在可用的 Windows 版本上,在不可用的早期版本中模拟它。 (我个人在许多 .NET 应用程序中使用了非常相似的东西。)

  • http://www.codeproject.com/KB/vb/vdialog.aspx http://www.codeproject.com/KB/vb/vdialog.aspx

  • http://www.codeproject.com/KB/WPF/WPFTaskDialogVistaAndXP.aspx http://www.codeproject.com/KB/WPF/WPFTaskDialogVistaAndXP.aspx

  • http://www.codeproject.com/KB/vista/TaskDialogWinForms.aspx http://www.codeproject.com/KB/vista/TaskDialogWinForms.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF:为什么消息框标题栏上没有图标 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 当其他列子项折叠时调整 WPF 网格列的大小?

    我有两个控件Grid 并且需要制作一个来填充所有Grid另一个获得后的空间Collapseded 我不知道什么Container我可以使用吗 我试过了StackPanel and DockPanel我也是 但找不到好的解决方案 这是我的代码
  • 缓冲数据库游标中的数据,同时保持 UI 响应

    我有一个已填充的数据库目录和一个可用于检索对象的游标 这个目录显然可能非常大 我想做的是使用反应式用户界面缓冲数据 同时保持 UI 数据绑定和响应 我按照步骤操作here http www interact sw co uk iangblo
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • OleLoadPicturePath 是否已以非向后兼容的方式更改?

    我最近遇到一个问题 我能够在一台 PC 上将图标添加到 VB6 表单 它运行良好 但他们无法在第二台 PC 上运行 编译它 结果发现图标文件是 32 位的 包括 Alpha 通道 这就是问题所在 但令我惊讶的是 这是一个依赖于系统的功能 在
  • 在后台进程中访问 WPF FlowDocument

    在后台访问 WPF FlowDocument 我的问题涉及在 WPF 后台访问 UI 对象 我见过几十个示例应用程序 它们都很简单 易于理解 其中 95 告诉你如何显示进度条 这并不是我想要的 我的问题是这样的 我想通过访问 RichTex
  • 在 WPF 中使用 Datagrid 进行多重选择

    我想知道如何使用 DataGridCheckBoxColumn 选择多行 这里我只能选择一行 但如何进行多项选择 我的 XAML 如下
  • WPF .exe - 大文件大小

    我正在开发一个 WPF 应用程序 发现 exe 大小超过 1 2MB 我想减少最终可执行文件的大小 代码不过200kb 我在项目中使用了一些 png图片 总共占用了20kb左右 为什么最终的可执行文件这么大 我使用 ILDASM 统计信息来
  • 即使光标位于画布之外也会调用 MouseMove 事件

    我不知道我的代码或 WPF 是否有问题 但问题是 我想创建一个小程序 您可以在其中用光标在画布上绘图 我有一个简单的 WPF 窗口
  • 如何从 C# 代码访问 wpf 中的 ResourceDictionary?

    我有一个DataTemplate在我想通过 C 代码访问的 xaml 文件中定义 谁能告诉我如何访问它 我添加了一个新的ResourceDictionary文件 其名称是Dictionary1 xaml 我有一个数据模板 例如
  • 怎么让画笔变得光滑,中间没有线条

    大家好 正如你在之前的画笔中看到的 中间有线条 不太顺利 如何使其平滑 如何删除该行 我用混合创建它
  • 以编程方式更改 StackPanel 在 Canvas 上的位置

    我在画布上有堆栈面板 堆栈面板有
  • C#:将音频文件从服务器流式传输到客户端

    我目前正在编写一个应用程序 该应用程序将允许用户安装某种形式的应用程序 可能是 Windows 服务 该应用程序将在其 PC 上打开一个端口 并在硬盘上指定一个特定的目的地 然后能够流式传输 mp3 文件 然后 我将有另一个应用程序 该应用
  • 从代码访问 WPF 控件验证规则

    XAML
  • Eclipse/CDT 项目资源管理器中这个装饰文件夹图标的含义是什么?

    CDT Eclipse 项目资源管理器中的这个特殊文件夹图标是什么意思 这个蓝色的东西看起来像一把钥匙 螺丝或某种工具 我猜这与CVS有关 我在 首选项 gt 外观 gt 标签装饰 设置中找不到该信息 文件夹或文件上的扳手图标意味着它正在覆
  • 设置 Wpf 饼图样式

    这是我的饼图 xaml
  • 从 StaticResource 设置 RowDefinition 高度

    在我的 WPF 样式中 我定义了一个标准网格行高 我想将其应用到几个地方 如下所示
  • 通过 RDP 使用 WPF 的 Direct2d

    我正在开发一个 C 应用程序 它使用 SharpDx 通过 Direct2d 渲染地图 该地图与 D3DImage 一起显示在 WPF 主机上 在本地计算机上 一切正常 但当我尝试通过远程桌面连接时 D3DImage 会丢失其后备缓冲区 并

随机推荐

  • 将命令行参数传递给使用 Padre 运行的 Perl 程序

    有没有办法将命令行参数传递给从 Padre 菜单 运行 gt 运行脚本 运行的 Perl 程序 在 工具 gt 首选项 gt 语言 Perl5 下 设置 脚本参数 并保存 或者在 工具 gt 首选项 gt 高级 下 查看 run scrip
  • OAuth 2.0 生成令牌和秘密令牌 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 Apache Oltu
  • 如何动态添加静态资源到spring-boot jar应用程序?

    我有 spring boot 应用程序 它创建带有 html 静态页面的目录 当我通过命令启动应用程序时 mvn spring boot run一切正常 包含静态页面的文件夹创建于 resources 目录和客户端可以访问页面 但我希望将我
  • 通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现“登录超时已过期”错误

    因此 我在让 sqlalchemy 和 pyodbc 与远程 MS SQL Server 一起使用时遇到了一些麻烦 本地 sqlcmd 工作正常 但当我尝试通过 python 代码读取数据库时却无法正常工作 任何帮助 将不胜感激 环境 Ce
  • PHP FILTER_VALIDATE_EMAIL 最大长度

    使用 PHP 时允许的最大字符长度是多少FILTER VALIDATE EMAIL 我正在测试我的脚本来测试允许的最大长度 200 的函数 但是当我使用超过 200 个字符的电子邮件时 PHPFILTER VALIDATE EMAIL返回假
  • DataBase(datamodel)建立文件夹结构

    计划用 Java 构建基于文件夹的结构 我将使用 GUI 的 jquery 插件 因此我不需要有关如何显示文件夹结构的信息 我正在寻找有关如何存储文件夹信息的后端逻辑 以便可以快速有效地检索它 每个文件夹都会有多个子文件夹 从叶文件夹中 我
  • 扩展 DOMDocument 和 DOMNode:返回对象的问题

    我正在尝试扩展 DOMDocument 类 以便使 XPath 选择更容易 我写了这段代码 class myDOMDocument extends DOMDocument function selectNodes xpath oxpath
  • Airflow 远程日志记录不起作用

    我有一个正在运行的 Apache Airflow 1 8 1 实例 我有一个工作连接 及其 ID 可以写入 Google Cloud Storage 并且我的气流用户有权写入存储桶 我尝试通过添加来使用远程日志存储功能 remote bas
  • 如何在 C# 中以编程方式创建 XML 站点地图

    我正在建立一个网站 现在我想创建它的 xml 站点地图 就像 google 站点地图一样 但我想使用 C 以编程方式创建它 谁能告诉我如何使用网站的基本 url 访问 Web 服务器上的根目录 将所有页面列表放入字符串列表中 来得容易 pr
  • 文件中的正则表达式 re.sub 列表

    我有一个文本列表 可以使用以下内容重新编辑 re sub 0000 1111 data 替换模式 4 4 3 3 with 1 4 2 3对于 shell 中的一个输入 效果也很好 然而 我尝试在列表中使用这种模式给了我一个 第一行出现不良
  • 调用 HP ePrint Android 应用程序

    我正在开发一个 Android 应用程序 它应该调用 Android HP ePrint 应用程序进行无线打印 为此 我使用代码 Intent intent new Intent com hp android print PRINT int
  • 在 BigQueryIO.write() 操作之后执行进程

    我有一个以 BigQuery 表作为接收器的管道 我需要在数据写入 BigQuery 后执行一些步骤 这些步骤包括对该表执行查询 从中读取数据以及写入不同的表 如何实现以上目标 我是否应该为后者创建一个不同的管道 但在第一个管道之后调用它将
  • Spring:/** 和 /* 在路径方面的差异

    当我们引用路径时 两个星号和一个星号有什么区别 早些时候我正在调试我的 Spring 3 项目 我试图使用添加 swf
  • 在IRB中,我可以查看我之前定义的方法的源代码吗?

    如果我在 IRB 中定义了一个方法 是否有办法在稍后的会话中查看其来源 gt def my method gt puts hi gt end 稍后输出几个屏幕我希望能够写出类似的东西 gt source my method 并返回 gt d
  • Xcode 8.1 - 如何更新故事板中所有视图的框架?

    在 Xcode 8 1 中 我可以通过单击 更新框架 按钮来更新故事板中的每个视图 但我想更新所有视图 我该怎么做 They added one standalone button to the leftmost side in the c
  • Athena 无法使用 OpenCSVSerde 解析日期

    我在 S3 上有一个非常简单的 csv 文件 i d f s 1 2018 01 01 1 001 something great 2 2018 01 02 2 002 something terrible 3 2018 01 03 3 0
  • 地图上重叠注释 (MKAnnotationView) 的问题

    在我的 iPhone 应用程序中 我将 MapKit 与 MKMapView 和自定义 MKAnnotationView 结合使用 问题是当注释在地图上重叠时 在我的应用程序中 注释是照片 这些照片可能会重叠 并且当您点击前面出现的注释时
  • 从 CSV 中删除一行

    我有一个包含多行和两列的 CSV 名称 和 信息 我正在循环遍历 CSV 并检查每一行的条件 如果满足条件 我想删除该行 for i 0 i le CSV length i if CSV name Fred remove CSV i tha
  • setInterval 在非活动选项卡上不会减慢速度

    这可能与一个非常常见的问题相反 当您使用setInterval在一个选项卡上切换到另一个选项卡时 间隔会显着缩短 即减慢 这对于音频计时来说非常明显 因为您可以听到它被减慢的声音 但在最新的 Chrome 56 和 Firefox 51 上
  • WPF:为什么消息框标题栏上没有图标

    我想要的只是我的消息框应该在其标题栏中显示我的应用程序的图标 或任何其他图标 但它没有 为什么不呢 The MessageBox in WPF http msdn microsoft com en us library system win