Подтвердить что ты не робот

Как использовать стандартные значки предупреждений/ошибок Windows в моем приложении WPF?

Я создаю настраиваемый диалог ошибок в своем приложении WPF, и я хочу использовать стандартный значок ошибки Windows. Могу ли я получить значок OS-специфики из WPF? Если нет, кто-нибудь знает, где можно получить .pngs с прозрачностью? Или знаете, где в Windows, чтобы извлечь их из?

До сих пор мои поиски ничего не отображали.

4b9b3361

Ответ 1

Существует класс SystemIcons, но ему нужна настройка для нужд WPF (например, преобразование Icon в ImageSource).

Ответ 2

Об использовании Стандартные значки Microsoft.

Подавляющее большинство разработчиков там не знают, что Visual Studio поставляется с библиотекой изображений. Итак, вот две ссылки, которые выделяют это:

Об использовании Библиотека изображений Microsoft Visual Studio 2010.

Об использовании Библиотека изображений Microsoft Visual Studio 2008.

Ответ 3

В Visual Studio используйте File + Open + File и выберите c:\windows\system32\user32.dll. Откройте значок node и дважды щелкните 103. На моей машине значок ошибки. Щелкните правой кнопкой мыши и выберите "Экспорт", чтобы сохранить его в файле.

Это неудобный способ. Эти значки также доступны в Visual Studio. В установочном каталоге Visual Studio перейдите на Common7\VS2008ImageLibrary\xxxx\VS2008ImageLibrary.zip + VS2008ImageLibrary\Аннотации и кнопки \ico_format\WinVista\error.ico. Файл redist.txt в Visual Studio прямо устанавливает прямое использование этого значка в вашем собственном приложении.

Ответ 4

Вот как я использовал значок системы в XAML:

xmlns:draw="clr-namespace:System.Drawing;assembly=System.Drawing"
...
<Image Source="{Binding Source={x:Static draw:SystemIcons.Warning},
        Converter={StaticResource IconToImageSourceConverter},
        Mode=OneWay}" />

Я использовал этот конвертер, чтобы повернуть значок в ImageSource:

public class IconToImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var icon = value as Icon;
        if (icon == null)
        {
            Trace.TraceWarning("Attempted to convert {0} instead of Icon object in IconToImageSourceConverter", value);
            return null;
        }

        ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
            icon.Handle,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());
        return imageSource;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Ответ 5

Вы можете использовать класс .NET SystemIcons примерно для первых трех шагов, если размер по умолчанию одобрен, см. modosansreves answer

Итак, это может быть так просто:

 Imaging.CreateBitmapSourceFromHIcon(SystemIcons.Error.Handle)

Ответ 6

Не можете ли вы просто использовать Windows API?

Пример Delphi:

procedure TForm1.FormClick(Sender: TObject);
var
  errIcon: HICON;
begin
  errIcon := LoadIcon(0, IDI_ERROR);
  DrawIcon(Canvas.Handle, 10, 10, errIcon)
end;

Ответ 7

Используйте это:

using System;
using System.Drawing;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Markup;
using System.Windows.Media.Imaging;

using Extensions
{
    [ContentProperty("Icon")]
    public class ImageSourceFromIconExtension : MarkupExtension
    {
        public Icon Icon { get; set; }

        public ImageSourceFromIconExtension()
        {
        }

        public ImageSourceFromIconExtension(Icon icon)
        {
            Icon = icon;
        }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return Imaging.CreateBitmapSourceFromHIcon(Icon.Handle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
        }
    }
}

Не забудьте добавить ссылку System.Drawing на ваш проект из глобального местоположения.

Затем используйте это в своем xaml:

<WindowOrSomething x:Class="BlaBlaWindow"
    xmlns:draw="clr-namespace:System.Drawing;assembly=System.Drawing"
    xmlns:ext="clr-namespace:Extensions">
    <Image Source="{ext:ImageSourceFromIcon {x:Static draw:SystemIcons.Error}}"/>
</WindowOrSomething>

Ответ 8

Вы можете сделать это следующим образом:

Graphics g = this.CreateGraphics();
g.DrawIcon(SystemIcons.Question, 40, 40);

Ответ 9

используйте SystemIcons и преобразуйте их в ImageSource так:

try   
{
    var temp = SystemIcons.WinLogo.ToBitmap();  //Your icon here
    BitmapImage bitmapImage = new BitmapImage();
    using (MemoryStream memory = new MemoryStream())
    {
       temp.Save(memory, ImageFormat.Png);
       memory.Position = 0;
       bitmapImage.BeginInit();
       bitmapImage.StreamSource = memory;
       bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
       bitmapImage.EndInit();
    }
    this.Icon = bitmapImage;
}
catch (Exception ex)
{
    this.Icon = null;
}