it-swarm.com.de

Bild in WPF-Schaltfläche zur Laufzeit nicht sichtbar

Alles in allem habe ich den folgenden Start einer kleinen Anwendung, die .resx-Dateien auf Konsistenz eingebetteter Klammern überprüft (damit keine Laufzeitfehler von nicht übereinstimmenden "... {0}" - Zeichenfolgen auftreten). Ich habe das folgende XAML für das MainWindow.xaml und mein spezielles Problem bezieht sich auf das Bild, das auf der Schaltfläche angezeigt werden soll

<Window x:Class="ResxChecker.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="174.383" Width="495.869">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="350*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="30*"/>
        </Grid.RowDefinitions>
        <Label Content="Select .resx file:" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top" Height="24" Width="Auto" Grid.ColumnSpan="1"/>
        <TextBox Grid.ColumnSpan="2" HorizontalAlignment="Stretch" Margin="10,0,0,0" Grid.Row="1" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/>
        <Button Grid.Column="2" HorizontalAlignment="Right" Margin="5,0,10,0" Grid.Row="1">
            <Image VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="16 " Width="16" Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"/>
        </Button>
    </Grid>
</Window>

Das Bild hat 'Build Action = Resource', 'In Ausgabeverzeichnis kopieren = Nicht kopieren' - das Bild wird im Designer aber nicht zur Laufzeit angezeigt. Ich habe die folgenden Fragen gesehen und die entsprechenden Antworten gelesen, aber keine hat das Problem gelöst:

  1. WPF-Steuerbilder werden bei Verwendung durch eine Anwendung nicht angezeigt

  2. Bildproblem in wpf (Bild wird nicht angezeigt)

  3. Hintergrundbild der Schaltfläche wird in WPF nicht angezeigt

Wie kann ich das Schaltflächenbild zur Laufzeit anzeigen lassen?

49
MoonKnight

Ändern Sie die Build-Aktion in "Ressource". Auch deine Pack-URL ist falsch. Verwenden Sie entweder:

Source="pack://application:,,,/Resource/UserCost2013Open16.png"

oder einfach

Source="/Resource/UserCost2013Open16.png"
67
Phil

Es gibt 2 Lösungen:

1: Ändern Sie die Einstellungen des Bildes:

Build Action = Content
Copy to output directory = Copy if newer
Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"


2: Bei Verwendung von application anstelle von siteoforigin im Quellpfad haben Sie folgende Möglichkeiten:

a) Das Bild befindet sich in einem Unterordner namens "Resources" und die EXE-Datei ist klein

Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Content
Copy to output directory = Copy if newer

b) Das Bild wird in die EXE-Datei aufgenommen, und es ist kein Unterordner mit Bilddatei vorhanden

Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Resource
Copy to output directory = Copy if newer
28
Basti

In meinem Fall hatte ich die Bilder in einem separaten Projekt mit dem Namen Common und die Bilder befanden sich in diesem Projekt in einem Ordner mit dem Namen Resources. In meinem anderen Projekt habe ich einen Verweis auf Common hinzugefügt und die Quelle der Bilder folgendermaßen festgelegt:

<Image Source="/Common;component/Resources/anImage.png"/>

Die Bilder haben das Build Action auf Resource und Copy to Output Directory bis Do not copy. Aus irgendeinem seltsamen Grund funktionierte es jedoch nicht, bis ich jede Assembly-Datei in meiner Lösung löschte und ein Clean Solution und Build Solution. Ich weiß nicht warum, aber alles begann zur Laufzeit zu funktionieren, nachdem ich alles neu aufgebaut hatte. Ich kann immer noch nicht herausfinden, warum es bei Design Time funktioniert hat.

7
Darien Pardinas

Vorausgesetzt, Sie haben

  • setze deinen Build Action auf Resource

  • setze diesen Pfad korrekt mit URI-PACK-FORMAT

In meinem Fall wurde es immer noch nicht angezeigt.

Clean & Rebuild NICHT nur Build hat es für mich behoben!

7
Felix D.

Sie sollten alles in Projektmappen-Explorer von Visual Studio hinzufügen. Anstatt das Bild nur in den Ordner im Windows Explorer zu kopieren, klicken Sie mit der rechten Maustaste auf einen beliebigen Ordner im Projektmappen-Explorer. Gehen Sie zu Hinzufügen> Vorhandenes Element ... und wählen Sie den Pfad zu Ihrer Ressource aus, die hinzugefügt werden soll.

Gehen Sie zu Ihrem im Ressourcenordner vorhandenen Bild, klicken Sie mit der rechten Maustaste auf das Bild und gehen Sie zu den Eigenschaften. Klicken Sie auf die Eigenschaft BuildAction und setzen Sie sie auf Ressource von keiner. Das wird klappen.

1
Deepak

Ich habe mein Bild als nächstes definiert:

<Image Source="/Resources/Images/icon.png"/>

Das Bild wird in Visual Studio Designer angezeigt, aber beim Starten der App wird kein Bild angezeigt! Es hat mich verrückt gemacht! Ich habe alle Build Action s mit clean/build ausprobiert, kein Glück.

In meinem Fall liegt das Problem daran, dass sich das Steuerelement (das Image verwendet) und die App selbst in unterschiedlichen Projekten befinden. Der Ordner Resources/Images befindet sich im Projekt Controls. Als Ergebnis hat die App versucht, icon.png in ihrem eigenen Debug-Ordner zu finden, aber tatsächlich befindet sie sich im Ordner Controls 'Debug.

Für mich funktionieren also zwei Lösungen:

1) setze Ressourcen/Bilder in das Projekt der App (nicht so gut, wenn es mehrere Projekte gibt, die Steuerelemente von Steuerelemente verwenden, aber es funktioniert)

2) Geben Sie den Namen des Controls-Projekts explizit in Image an:

<Image Source="/Controls;component/Resources/Images/icon.png"/>
1
Mari

Source = "file: /// D: /100x100.jpg" /> funktioniert bei mir.

0
Neo