Я пришел в основном интернет и немного форм Windows фон. Для нового проекта мы будем использовать в WPF. Приложение WPF понадобится 10 - 20 небольших иконки и изображения для наглядности. Я думал о хранении их в собрании как внедренные ресурсы. Это правильный путь?
Как мне указать в XAML, что контроль изображения загрузить изображения из внедренного ресурса?
Если вы будете использовать изображения в нескольких местах, потом он's стоит, загружая данные изображения только один раз в память и затем разделить его между всеми изображения
элементов.
Для этого создать BitmapSource
как где-то ресурсе:
в
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
Затем, в коде, использовать что-то вроде:
в
<Image Source="{StaticResource MyImageSource}" />
В моем случае, я обнаружил, что мне пришлось установить изображения.файл PNG`, чтобы строить действия "ресурс", а не просто "содержание". В этом случае изображение будет проведена в течение скомпилированной сборки.
Я нашел, чтобы быть лучшие практики, используя изображения, видео и т. д. это:
Пример ###
<Image Source="/WPFApplication;component/Images/Start.png" />
Преимущества:
Некоторые люди спрашивают об этом в код и не получив ответа.
Проведя много часов поиска я нашел очень простой способ, я не нашел пример, и поэтому я поделюсь своим здесь которая работает с изображениями. (мой был .гиф)
Резюме:
Он возвращает BitmapFrame который ImageSource-то "направления" и, кажется, нравится.
Использование:
doGetImageSourceFromResource ("[YourAssemblyNameHere]", "[YourResourceNameHere]");
Метод:
static internal ImageSource doGetImageSourceFromResource(string psAssemblyName, string psResourceName)
{
Uri oUri = new Uri("pack://application:,,,/" +psAssemblyName +";component/" +psResourceName, UriKind.RelativeOrAbsolute);
return BitmapFrame.Create(oUri);
}
Уроки:
Из моего опыта пакете строку не проблема, проверить свои потоки и, особенно, если читать ее в первый раз установил указатель в конец файла, и вы должны повторно установить его в ноль перед повторным чтением.
Я надеюсь, это сэкономит вам много часов, я хочу, чтобы эта часть была для меня!
В код, чтобы загрузить ресурс в сборку на выполнение, где мои изображения `частоты.ПНГ в папке "икон" и определяется как "ресурс":
this.Icon = new BitmapImage(new Uri(@"pack://application:,,,/"
+ Assembly.GetExecutingAssembly().GetName().Name
+ ";component/"
+ "Icons/Freq.png", UriKind.Absolute));
Я также сделал функцию:
/// <summary>
/// Load a resource WPF-BitmapImage (png, bmp, ...) from embedded resource defined as 'Resource' not as 'Embedded resource'.
/// </summary>
/// <param name="pathInApplication">Path without starting slash</param>
/// <param name="assembly">Usually 'Assembly.GetExecutingAssembly()'. If not mentionned, I will use the calling assembly</param>
/// <returns></returns>
public static BitmapImage LoadBitmapFromResource(string pathInApplication, Assembly assembly = null)
{
if (assembly == null)
{
assembly = Assembly.GetCallingAssembly();
}
if (pathInApplication[0] == '/')
{
pathInApplication = pathInApplication.Substring(1);
}
return new BitmapImage(new Uri(@"pack://application:,,,/" + assembly.GetName().Name + ";component/" + pathInApplication, UriKind.Absolute));
}
Использование (предположение вы помещаете функцию в классе ResourceHelper):
this.Icon = ResourceHelper.LoadBitmapFromResource("Icons/Freq.png");
Примечание: смотри [MSDN для URI типа "Pack" в WPF][1]:<БР> пакета://приложение:,,,/ReferencedAssembly;компонент/подпапка/ResourceFile.язык XAML
[1]: https://msdn.microsoft.com/en-us/library/aa970069(в=против 100).аспн
Да, это правильный путь.
Вы можете использовать изображения в файл ресурсов, ТОЛЬКО используя путь:
<Image Source="..\Media\Image.png" />
Вы должны установить действие при построении файла изображения, чтобы "ресурсов и".
Полное описание, как использовать ресурсы: [приложения WPF ресурсы, содержимое и файлы данных][1]
И как ссылаться на них, читать "по-URI типа "Pack" в WPF и".
Короче говоря, есть даже средства для справочных ресурсов с ссылками/ссылки на сборки.
[1]: https://msdn.microsoft.com/en-us/library/aa970494(в=против 100).аспн
Этот работал для меня:
<BitmapImage x:Key="MyImageSource" UriSource="Resources/Image.png" />
Если вы're, используя смесь, чтобы сделать его более легким и не иметь никаких затруднений, получая правильный путь Источник атрибут, просто перетащите изображение из панели проекта на конструктор.
Да, это's право путем. Вы можете использовать изображения в файл ресурсов, используя путь:
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding Nname}" IsChecked="{Binding IsChecked}"/>
<Image Source="E:\SWorking\SharePointSecurityApps\SharePointSecurityApps\SharePointSecurityApps.WPF\Images\sitepermission.png"/>
<TextBlock Text="{Binding Path=Title}"></TextBlock>
</StackPanel>
Следующие работал и образы, чтобы быть набор ресурсов в свойства:
var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(MyProject.Properties.Resources.myImage.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
MyButton.Background = new ImageBrush(bitmapSource);
img_username.Source = bitmapSource;