But...">

How to get a specific icon in a container (e.g. dll) in XAML?

I can install an icon container in XAML:

<Image Source="Shell32.dll.ico" /> 

But how can I set the index of the icon in the container in XAML? sort of:

 <Image Source="Shell32.dll,5" /> 

Or how:

 <Image Source="Shell32.dll" Index="5" /> 

etc...

+6
source share
1 answer

Here's how it goes: IValueConverter first:

 using System; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Data; using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Imaging; [ValueConversion(typeof(string), typeof(ImageSource))] public class HabeasIcon : IValueConverter { [DllImport("shell32.dll")] private static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { string[] fileName = ((string)parameter).Split('|'); if (targetType != typeof(ImageSource)) return Binding.DoNothing; IntPtr hIcon = ExtractIcon(Process.GetCurrentProcess().Handle, fileName[0], int.Parse(fileName[1])); ImageSource ret = Imaging.CreateBitmapSourceFromHIcon(hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); return ret; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

XAML:

 <Image Source="{Binding Converter={StaticResource iconExtractor}, ConverterParameter=c:\\Windows\\System32\\shell32.dll|72}"/> 
+4
source

Source: https://habr.com/ru/post/891881/


All Articles