it-swarm.com.de

Wie verwende ich standardmäßige Windows-Warnungs-/Fehlersymbole in meiner WPF-App?

Ich mache ein benutzerdefiniertes Fehlerdialogfeld in meiner WPF-App und möchte ein Standard-Windows-Fehlersymbol verwenden. Kann ich das betriebssystemspezifische Symbol von WPF erhalten? Wenn nicht, weiß jemand, wohin .pngs mit Transparenz von ihnen zu gelangen? Oder wissen Sie, wo in Windows sie gehen sollen?

Meine Recherchen haben bisher nichts ergeben.

40
RandomEngy

Es gibt eine SystemIcons -Klasse, die jedoch für WPF-Anforderungen angepasst werden muss (d. H. Konvertieren von Icon in ImageSource).

33

Informationen zur Verwendung von Standard-Microsoft-Icons .

Die große Mehrheit der Entwickler weiß nicht, dass Visual Studio über eine Bildbibliothek verfügt. Hier also zwei Links, die es hervorheben:

Informationen zur Verwendung von Microsoft Visual Studio 2010 - Bildbibliothek .

Informationen zur Verwendung von Microsoft Visual Studio 2008 - Bildbibliothek .

29

So habe ich in XAML ein Systemsymbol verwendet:

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

Ich habe diesen Konverter verwendet, um ein Icon zu ImageSource zu machen:

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();
    }
}
8
run2thesun

Verwenden Sie in Visual Studio File + Open + File und wählen Sie c:\windows\system32\user32.dll. Öffnen Sie den Symbolknoten und doppelklicken Sie auf 103. Auf meinem Computer ist das Fehlersymbol angezeigt. Klicken Sie mit der rechten Maustaste darauf und wählen Sie Exportieren, um es in einer Datei zu speichern.

Das ist der fiese Weg. Diese Symbole sind auch in Visual Studio verfügbar. Wechseln Sie in Ihrem Visual Studio-Installationsverzeichnis zu Common7\VS2008ImageLibrary\xxxx\VS2008ImageLibrary.Zip + VS2008ImageLibrary\Anmerkungen & Schaltflächen\ico_format\WinVista\error.ico. Die Datei redist.txt in der Visual Studio-Installation gibt Ihnen explizit das Recht, dieses Symbol in Ihrer eigenen Anwendung zu verwenden.

6
Hans Passant

Sie können die SystemIcons-Klasse von .NET ungefähr für die ersten drei Schritte verwenden, wenn die Standardgröße in Ordnung ist, siehe modosansreves answer .

Es könnte also so einfach sein wie:

 Imaging.CreateBitmapSourceFromHIcon(SystemIcons.Error.Handle)
4
Ben Voigt

Benutze das:

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());
        }
    }
}

Vergessen Sie nicht, die System.Drawing-Referenz vom globalen Speicherort zu Ihrem Projekt hinzuzufügen.

Dann verwenden Sie dies in Ihrem 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>
2
DileriumL

Können Sie nicht einfach die Windows-API verwenden?

Delphi-Beispiel:

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

Konvertieren Sie SystemIcons.Error etc in .png (behält die Transparenz bei), fügen Sie den Ressourcen dann Ausgabe hinzu und verwenden Sie sie wie üblich in der WPF-Image-Steuerung.

    System.Drawing.SystemIcons.Error.ToBitmap().Save("Error.png", System.Drawing.Imaging.ImageFormat.Png);
0
David Coleman

verwenden Sie SystemIcons und konvertieren Sie sie in eine ImageSource wie folgt:

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;
}
0
user1

Sie können es so zeichnen:

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