如何爲各種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. 主機,獲取並顯示各種圖像的大型圖書館
- 2. 保存圖像的各種擴展名
- 3. 顯示各種圖像表中的HTML
- 4. 如何在圖像中縮放各種尺寸的Sprites大小?
- 5. 如何獲取從各種表中使用的所有列?
- 6. 如何獲取各種FormStartPosition成員的值?
- 7. 如何獲取各種地理位置的IP
- 8. 如何從各種設備的dateppicker中獲取所選日期?
- 9. 如何獲取各種緩存的數量
- 10. File_put_content各種圖像,並與數
- 11. 將各種圖像定位到div
- 12. CSS3淡入淡出各種圖像
- 13. 如何獲取圖像clientHeight的圖像?
- 14. 從各種來源獲取信息
- 15. 如何獲取圖像輪廓(或從圖像中獲取特定顏色?)-ANDroid
- 16. 圖像上各種圖像增強技術的數學比較?
- 17. 如何從各種URL(相同路徑)下載圖像
- 18. 如何動態繪製各種圖形
- 19. 在各種圖像之間獲取未知空間加在一起
- 20. 如何從各種TableLayoutPanel獲取文本框位置?
- 21. 如何在Python中以相同順序獲取各種屬性
- 22. 如何從shell腳本獲取各種輸出?
- 23. 如何根據各種設備獲取短信列表
- 24. 圖像拖放 - 如何獲取圖像
- 25. 如何從圖庫(或繪圖)獲取圖像以更新ImageView?
- 26. 獲取圖像或圖像的網址,選擇該圖像
- 27. 如何獲取ooyala圖像?
- 28. 如何獲取geotiff圖像
- 29. 獲取圖像前10種顏色
- 30. 如何獲取圖像視圖內圖像的圖像路徑?
非常感謝!這很好用!但是,我注意到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