如何为各种System.Windows.MessageBoxImage和/或 System.Windows获取System.Drawing.Image。 Forms.MessageBoxIcon(S)如何获取各种MessageBoxImage或MessageBoxIcon的图像
37
A
回答
48
就是我一直在寻找
如
SystemIcons.Warning.ToBitmap();
29
您也可以在您的XAML SystemIcons如下:
在您的XAML中包含一个转换器(请参阅下面的代码)作为资源和一个Image控件。 此图片样本显示信息图标。
<Window.Resources>
<Converters:SystemIconConverter x:Key="iconConverter"/>
</Window.Resources>
<Image Visibility="Visible"
Margin="10,10,0,1"
Stretch="Uniform"
MaxHeight="25"
VerticalAlignment="Top"
HorizontalAlignment="Left"
Source="{Binding Converter={StaticResource iconConverter}, ConverterParameter=Information}"/>
这里是转换器的实现:
using System;
using System.Drawing;
using System.Globalization;
using System.Reflection;
using System.Windows;
using System.Windows.Data;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
namespace Converters
{
[ValueConversion(typeof(string), typeof(BitmapSource))]
public class SystemIconConverter : IValueConverter
{
public object Convert(object value, Type type, object parameter, CultureInfo culture)
{
Icon icon = (Icon)typeof(SystemIcons).GetProperty(parameter.ToString(), BindingFlags.Public | BindingFlags.Static).GetValue(null, null);
BitmapSource bs = Imaging.CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
return bs;
}
public object ConvertBack(object value, Type type, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
}
12
正如其他人所指出SystemIcons
是应该包含这些图标的类,但在Windows 8.1(也可能在早期版本太)的图标存在于SystemIcons
中,与Asterisk,Information和Question中的MessageBoxes
显示的不同。对话框上的图标看上去很多平坦的。见 - 例如 - 问号图标:
对话框中的图标是本地对话框图标,并在后台窗体上的最左边的图标是从SystemIcons
类检索到的图标。
有关如何从MessageBox中的图标看到这个answer各种方法和细节,但我在这里有一个简单的总结,只是为了完整起见:
您应该使用SHGetStockIconInfo
功能:
SHSTOCKICONINFO sii = new SHSTOCKICONINFO();
sii.cbSize = (UInt32)Marshal.SizeOf(typeof(SHSTOCKICONINFO));
Marshal.ThrowExceptionForHR(SHGetStockIconInfo(SHSTOCKICONID.SIID_INFO,
SHGSI.SHGSI_ICON ,
ref sii));
pictureBox1.Image = Icon.FromHandle(sii.hIcon).ToBitmap();
请note:
如果这个函数返回HIC的图标句柄在 SHSTOCKICONINFO结构成员指向PSII,你负责 释放图标与DestroyIcon当你不再需要它。
当然这个来工作,你必须定义一些枚举和结构:
public enum SHSTOCKICONID : uint
{
//...
SIID_INFO = 79,
//...
}
[Flags]
public enum SHGSI : uint
{
SHGSI_ICONLOCATION = 0,
SHGSI_ICON = 0x000000100,
SHGSI_SYSICONINDEX = 0x000004000,
SHGSI_LINKOVERLAY = 0x000008000,
SHGSI_SELECTED = 0x000010000,
SHGSI_LARGEICON = 0x000000000,
SHGSI_SMALLICON = 0x000000001,
SHGSI_SHELLICONSIZE = 0x000000004
}
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SHSTOCKICONINFO
{
public UInt32 cbSize;
public IntPtr hIcon;
public Int32 iSysIconIndex;
public Int32 iIcon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260/*MAX_PATH*/)]
public string szPath;
}
[DllImport("Shell32.dll", SetLastError = false)]
public static extern Int32 SHGetStockIconInfo(SHSTOCKICONID siid, SHGSI uFlags, ref SHSTOCKICONINFO psii);
相关问题
- 1. 显示各种图像表中的HTML
- 2. 如何在图像中缩放各种尺寸的Sprites大小?
- 3. 如何获取各种地理位置的IP
- 4. 从各种来源获取信息
- 5. 如何从各种URL(相同路径)下载图像
- 6. 在各种图像之间获取未知空间加在一起
- 7. 如何动态绘制各种图形
- 8. 如何在Python中以相同顺序获取各种属性
- 9. 如何从shell脚本获取各种输出?
- 10. 如何从各种TableLayoutPanel获取文本框位置?
- 11. 如何从图库(或绘图)获取图像以更新ImageView?
- 12. 获取图像前10种颜色
- 13. 如何从PHP或Jquery或两者中获取图像?
- 14. 如何创建各种
- 15. javascript:取消各种要求
- 16. 提取各种信息
- 17. 如何搜索特定图像的iframe或获取源代码
- 18. 如何从jicon或jbutton的imageicon中获取图像?
- 19. 创建与各种图标和splashscreens各种APK
- 20. 如何从gridView获取图像(位图)
- 21. 如何获取图标图像
- 22. 如何从PNG图像获取图标?
- 23. 如何使用OpenCV for iPhone检测图像内的各种大小物体?
- 24. HTML - 如何制作各种大小的图像填充表格单元格
- 25. 调整各种设备的服务器上的图像大小
- 26. 如何在图像地图鼠标中获取图像的ID
- 27. 如何获取图像的名称
- 28. 如何获取图像的坐标/ JLabel?
- 29. 如何获取flickr图像的基础?
- 30. 如何获取BitmapImage的图像格式?
非常感谢!这很好用!但是,我注意到StackOverflow在Creative Commons许可下运行。因此,我在技术上不能在未经您许可的情况下在我的商业应用程序中使用/修改您的代码(我不希望获得Creative Commons许可)。你愿意给我许可吗?我仍然可以信任你的工作。 – skybluecodeflier 2011-09-07 16:10:19
@skybluecodeflier,发布到StackOverflow的任何代码都是创意共享:http://meta.stackexchange。com/questions/12527/do-i-have-to-worry-about-copyright-issues-for-code-posted-on-stack-overflow – 2014-05-01 20:06:09
@Zbonboni你的转换器是否有任何特殊原因忽略了'value'值并执行仅使用'parameter'进行转换?这似乎是非常典型的转换器。 – 2016-10-17 11:59:32