Ответ 1
Измените действие сборки на "Ресурс". Также неправильный URL-адрес вашего пакета. Либо используйте:
Source="pack://application:,,,/Resource/UserCost2013Open16.png"
или просто
Source="/Resource/UserCost2013Open16.png"
Все, у меня есть следующее начало небольшому приложению, которое проверяет файлы .resx на согласованность встроенных скобок (так что ошибки времени выполнения несоответствующих строк "... {0}" не происходят). У меня есть следующий XAML для MainWindow.xaml, и моя конкретная проблема связана с изображением, которое должно отображаться на кнопке
<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>
У изображения есть "Build Action = Resource", "Copy to output directory = Do not copy" - изображение отображается в дизайнере, но не во время выполнения. Я видел следующие вопросы и читал соответствующие ответы, но никто не решает проблему:
Как получить изображение кнопки во время выполнения?
Измените действие сборки на "Ресурс". Также неправильный URL-адрес вашего пакета. Либо используйте:
Source="pack://application:,,,/Resource/UserCost2013Open16.png"
или просто
Source="/Resource/UserCost2013Open16.png"
Есть 2 решения:
1: Измените настройки изображения:
Build Action = Content
Copy to output directory = Copy if newer
Source="pack://siteoforigin:,,,/Resources/UserCost2013Open16.png"
2: При использовании приложения вместо siteoforigin в исходном пути вам необходимо:
a) Изображение будет в SubFolder под названием "Ресурсы", а файл .exe будет небольшим.
Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Content
Copy to output directory = Copy if newer
b) Изображение будет включено в .exe, и никакая подпапка с файлом изображения не будет существовать
Source="pack://application:,,,/Resources/UserCost2013Open16.png"
Build Action = Resource
Copy to output directory = Copy if newer
В моем случае у меня были изображения в отдельном проекте с именем Common
, а изображения находились под папкой с именем Resources
в этом проекте. В моем другом проекте я добавил ссылку на Common
и установил источник изображений следующим образом:
<Image Source="/Common;component/Resources/anImage.png"/>
У изображений Build Action
установлено значение Resource
и Copy to Output Directory
на Do not copy
. Однако по какой-то странной причине он не работал, пока я не удалил каждый файл сборки в своем решении и не сделал Clean Solution
и Build Solution
. Не уверен, почему, но все это началось во время выполнения, как только я перестроил все. Я все еще не могу понять, почему он работал в Design Time, хотя.
Предположим, что у вас
установите Build Action
в Resource
правильно установить этот путь, используя URI-PACK-FORMAT
В моем случае он все еще не показывался.
Clean & Rebuild
Не просто Build исправил его для меня!
Перейдите к своему изображению в папке ресурсов, щелкните правой кнопкой мыши по изображению, перейдите к свойствам. Щелкните свойство BuildAction и установите для него значение Ресурс из none. Это будет работать.
Вы должны добавить любую вещь внутри Обозревателя решений Visual Studio. Вместо того, чтобы просто копировать изображение в папку в Проводнике Windows, нажмите "Правая кнопка мыши" в любой папке в обозревателе решений, перейдите в Добавить > Существующий элемент... и выберите путь к добавляемому ресурсу.
Я определил свое изображение следующим образом:
<Image Source="/Resources/Images/icon.png"/>
Изображение отображается в дизайнере Visual Studio, но при запуске приложения изображение не отображается! Это сделало меня сумасшедшим! Я пробовал все Build Actions с помощью clean/build, не повезло.
В моем случае проблема связана с тем, что элемент управления (который использует Image) и само приложение находится в разных проектах. Ресурсы/Картинки находятся в проекте Controls. В результате приложение попыталось найти icon.png в собственной папке Debug, но на самом деле оно находится в папке Debug от Controls.
Итак, для меня работают два решения:
1) поместите ресурсы/изображения в проект приложения (не так хорошо, когда есть несколько проектов, которые используют элементы управления из проекта Controls, но он работает)
2) явно укажите имя проекта Controls внутри изображения:
<Image Source="/Controls;component/Resources/Images/icon.png"/>