Делаю программу для очистки ресурсов пк путем закрытия программ, не внесенных в WhiteList. Для наглядности решил добавить иконки приложений к их названиям, но как это сделать - не имею ни малейшего представления.
Всё просто. Единственная сложность — вам придётся подключить System.Drawing для того, чтобы вытащить иконку.
На самом деле, согласно MVVM добыча иконки — задача модели, но я для простоты сделаю это в VM. Получаем следующее:
class FileVM
{
public string Name { get; }
public ImageSource Icon { get; }
public FileVM(string path)
{
Name = System.IO.Path.GetFileName(path);
using (var icon = System.Drawing.Icon.ExtractAssociatedIcon(path))
{
Icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
}
}
В DataContext помещаем, к примеру,
var systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
var files = Directory.EnumerateFiles(systemFolder, "*.exe");
var vms = files.Take(20).Select(p => new FileVM(p)).ToList();
Простейший XAML:
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<ItemContainerTemplate>
<DockPanel LastChildFill="True">
<Image Source="{Binding Icon}" Height="32" Width="32" DockPanel.Dock="Left"/>
<TextBlock Text="{Binding Name}"/>
</DockPanel>
</ItemContainerTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Получаем:
Сборка персонального компьютера от Artline: умный выбор для современных пользователей