Làm thế nào để tôi có được một System.Drawing.Image cho System.Windows.MessageBoxImage khác nhau (s) và/hoặc System.Windows. Forms.MessageBoxIcon (s)Làm thế nào để tôi có được một hình ảnh cho các MessageBoxImage khác nhau (s) hoặc MessageBoxIcon (s)
Trả lời
bạn cũng có thể bao gồm SystemIcons trong XAML của bạn như sau:
Bao gồm bộ chuyển đổi (xem mã bên dưới) dưới dạng Tài nguyên và điều khiển Hình ảnh trong XAML của bạn. Mẫu Hình ảnh này ở đây hiển thị biểu tượng thông tin.
<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}"/>
Đây là việc thực hiện cho bộ chuyển đổi:
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();
}
}
}
Như những người khác đã tuyên bố SystemIcons
là lớp học mà nên chứa những biểu tượng, nhưng trên Windows 8.1 (và có thể trên các phiên bản trước đó quá) các biểu tượng có mặt trong các SystemIcons
khác với những người được hiển thị trên MessageBoxes
trong trường hợp của Asterisk, thông tin và câu hỏi. Các biểu tượng trên hộp thoại trông nhiều hơn phẳng hơn. Xem - ví dụ - biểu tượng Câu hỏi:
Biểu tượng trong hộp thoại là biểu tượng thoại bản địa, và các biểu tượng bên trái về hình thức trong nền là biểu tượng lấy từ lớp SystemIcons
.
Đối với các phương pháp khác nhau và chi tiết về cách để có được những biểu tượng từ MessageBox thấy answer này, nhưng tôi bao gồm ở đây một bản tóm tắt nhanh chóng, chỉ vì lợi ích của sự hoàn chỉnh:
Bạn nên sử dụng SHGetStockIconInfo
chức năng:
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();
Hãy note:
Nếu hàm này trả về một tay cầm biểu tượng trong HIC trên thành viên của cấu trúc SHSTOCKICONINFO trỏ đến bởi PSII, bạn có trách nhiệm giải phóng vào biểu tượng với DestroyIcon khi bạn không còn cần đến nó.
Tất nhiên để làm việc này, bạn sẽ phải xác định một vài enums và cấu trúc:
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. Trong Perl, sự khác nhau giữa s/^ \ s + // và s/\ s + $ // là gì?
- 2. Có thể (s là "") và (s == "") bao giờ cho kết quả khác nhau trong Python 2.6.2?
- 3. Làm cách nào để tính MB/s & MiB/s?
- 4. Xoay hình ảnh (s) OnClick với jQuery?
- 5. Làm thế nào để tôi có được hình ảnh khác nhau trên các trang khác nhau trong Crystal Reports VS2010
- 6. đường ray s hoặc bó đường ray hành lý s
- 7. số thập phân (s, p) hoặc số (s, p)?
- 8. Sự khác nhau giữa việc gọi Double.valueOf (String s) và new Double (String s) là gì?
- 9. Làm thế nào để đại diện cho một đa giác với lỗ (s)?
- 10. iPhone có thể kéo giãnImageWithLeftCapWidth chỉ làm cho "D" s
- 11. Là ctrl-s tiết kiệm phổ quát để lưu hoặc có sự kết hợp khác nhau cho các ngôn ngữ khác nhau
- 12. Hiểu rõ regex [\ s \ S - [<>]] *
- 13. Làm thế nào để kết hợp "Custom Header View (s)" và "Regular Header (s)" trong một UITableViewController?
- 14. jquery bấm phím kiện cho cmd + s VÀ ctrl + s
- 15. Cấu hình JobConf v/s cho Hadoop 1.0.4
- 16. chuỗi s; &s+1; Pháp lý? UB?
- 17. Làm thế nào để có được thứ sáu cuối cùng của tháng (s) sử dụng .NET
- 18. Tại sao s/^ \ s + | \ s + $ // g; chậm hơn nhiều so với hai thay thế riêng biệt?
- 19. Làm thế nào để in% s trong C?
- 20. Làm thế nào để có được một mảng hình ảnh?
- 21. OLEDB v/s ODBC
- 22. [\ S \ s] * có nghĩa là gì trong regex trong PHP?
- 23. Tệp .S là gì?
- 24. get_absolute_url - Django`s sitemap
- 25. Tôi làm cách nào để sử dụng s /// của Perl trong một biểu thức?
- 26. So sánh hai ObservableCollection (s) để xem nếu chúng khác nhau
- 27. Cho chuỗi s, tìm chuỗi ngắn nhất t, sao cho, t^m = s
- 28. Làm thế nào để viết thẻ RFID cho Nexus S NFC để đọc?
- 29. Thuật toán kiểm tra xem trong mảng S và T là số nguyên s và t sao cho s + t = k nếu k được cho số
- 30. mySQL: Nhiều COUNT() s dựa trên các tiêu chí khác nhau
Cảm ơn rất nhiều! Điều này hoạt động tuyệt vời! Tuy nhiên, tôi nhận thấy rằng StackOverflow hoạt động theo giấy phép Creative Commons. Vì vậy, về mặt kỹ thuật tôi không thể sử dụng/điều chỉnh mã của bạn trong ứng dụng thương mại của tôi (mà tôi không muốn theo giấy phép Creative Commons) mà không có sự cho phép của bạn. Bạn có sẵn sàng cho phép tôi không? Tôi vẫn có thể ghi nhận công việc của bạn. – skybluecodeflier
@skybluecodeflier, bất kỳ mã nào được đăng lên StackOverflow đều là commons sáng tạo: http: //meta.stackexchange.com/questions/12527/do-i-have-to-lo-about-copyright-issues-cho-code-posted-on-stack-overflow –
@Zamboni Có lý do cụ thể nào mà trình chuyển đổi của bạn bỏ qua 'giá trị' và thực hiện không chuyển đổi chỉ sử dụng 'tham số'? Điều đó có vẻ không điển hình của bộ chuyển đổi. –