370 Stimmen

Einstellen der WPF-Bildquelle im Code

Ich versuche, die Quelle eines WPF-Bildes im Code festzulegen. Das Bild ist als eine Ressource in das Projekt eingebettet. Durch das Betrachten von Beispielen habe ich mit dem unten stehenden Code kommen. Aus irgendeinem Grund funktioniert es nicht - das Bild wird nicht angezeigt.

Bei der Fehlersuche kann ich sehen, dass der Stream die Bilddaten enthält. Was ist also falsch?

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;

Das Symbol ist in etwa wie folgt definiert: <Image x:Name="_icon" Width="16" Height="16" />

19voto

IlPADlI Punkte 1835

T

internal static class ResourceAccessor
{
    public static Uri Get(string resourcePath)
    {
        var uri = string.Format(
            "pack://application:,,,/{0};component/{1}"
            , Assembly.GetExecutingAssembly().GetName().Name
            , resourcePath
        );

        return new Uri(uri);
    }
}

U

new BitmapImage(ResourceAccessor.Get("Images/1.png"))

17voto

Payson Welch Punkte 1354

Sie können

 this.Icon = new BitmapImage(new Uri("Icon.ico", UriKind.Relative));

15voto

Andrew Myhre Punkte 1394

Haben Sie es schon versucht?

Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = iconStream;
bitmap.EndInit();
_icon.Source = bitmap;

9voto

Hollyroody Punkte 91

I

MyImage.Source = MyImage.FindResource("MyImageKeyDictionary") as ImageSource;

8voto

awe Punkte 21056

Hier ein Beispiel, bei dem der Bildpfad dynamisch festgelegt wird (das Bild befindet sich irgendwo auf dem Datenträger und wird nicht als Ressource erstellt):

if (File.Exists(imagePath))
{
    // Create image element to set as icon on the menu element
    Image icon = new Image();
    BitmapImage bmImage = new BitmapImage();
    bmImage.BeginInit();
    bmImage.UriSource = new Uri(imagePath, UriKind.Absolute);
    bmImage.EndInit();
    icon.Source = bmImage;
    icon.MaxWidth = 25;
    item.Icon = icon;
}

Überlegungen zu Ikonen...

Auf den ersten Blick würde man denken, dass die Eigenschaft Icon nur ein Bild enthalten kann. Aber sie kann eigentlich alles enthalten! Ich entdeckte dies zufällig, als ich programmatisch versuchte, die Eigenschaft Image Eigenschaft direkt in eine Zeichenkette mit dem Pfad zu einem Bild. Das Ergebnis war, dass nicht das Bild, sondern der tatsächliche Text des Pfades angezeigt wurde!

Daraus ergibt sich die Alternative, kein Bild für das Symbol zu erstellen, sondern stattdessen Text mit einer Symbolschrift zu verwenden, um ein einfaches "Symbol" anzuzeigen. Das folgende Beispiel verwendet die Schriftart Wingdings die ein "Floppydisk"-Symbol enthält. Dieses Symbol ist in Wirklichkeit das Zeichen < die in XAML eine besondere Bedeutung hat, so dass wir die kodierte Version verwenden müssen &lt; stattdessen. Das funktioniert wie ein Traum! Die folgende Abbildung zeigt ein Floppydisk-Symbol als Symbol für den Menüpunkt:

<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save">
  <MenuItem.Icon>
    <Label VerticalAlignment="Center" HorizontalAlignment="Center" FontFamily="Wingdings">&lt;</Label>
  </MenuItem.Icon>
</MenuItem>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X