Элемент управления WPF, размещенный в Windows Forms: возможно ли получить доступ к файлам ресурсов? - PullRequest
2 голосов
/ 10 февраля 2010

У меня есть элемент управления WPF, размещенный в Windows Forms, и я хотел бы получить доступ к его ресурсам, в частности к изображениям.Каков наилучший способ сделать это?

Я думал об использовании ResourceDictionary, но я не уверен, как получить к нему доступ из формы Windows.

1 Ответ

1 голос
/ 10 февраля 2010

Это автономный элемент управления WPF в DLL? Есть два способа, которыми ресурсы могут быть встроены ... как часть файла .resources (например, вкладка "Ресурсы" проекта) или как файлы, включенные как "Встроенные ресурсы" ...

Чтобы получить ссылку на сборку для DLL, обычно это проще всего:

 var ass = typeof(ClassInOtherDll).Assembly;

В ресурсах

Если это часть ресурсов проекта по умолчанию, а не другой файл .resources, включенный в DLL, вы можете использовать базовое имя по умолчанию.

var ass = typeof(ClassInTargetDLL).Assembly;            
var rm = new ResourceManager("...BaseName...", ass);

BaseName for default project resources is : 
  C# :=  Namespace.Properties.Resources
  VB :=  Namespace.Resources

После этого вы можете просто вызвать GetObject () и выполнить приведение обратно:

var myImage = rm.GetObject("check_16");
return myImage as Bitmap;

Если вы хотите узнать, что там, получите ссылку на сборку и позвоните ass.GetManifestResourceNames ()

  • .resources файлы могут использоваться с ResourceManager
  • встроенные ресурсы будут отображаться в виде списка. Для этого используйте другой метод.

И все это при условии, что они используют культуру по умолчанию =)

В качестве встроенных ресурсов

Вы можете использовать обычные методы сборки, чтобы получить встроенный ресурс. Вы найдете его по имени, а затем вам нужно будет преобразовать поток обратно в нужный вам тип.

GetManifestResourceNames()
GetManifestResourceStream(name)  

Я обычно использую это так:

// called GetMp3 in the post, but it returns a stream.  is the same thing
var stream = GetResourceStream("navigation.xml");
var reader = New XmlTextReader(stream);
return reader;

Чтобы получить изображение, которое является встроенным ресурсом, это работает для меня:

var stream = GetResoureStram("check_32.png");
var bmp    = new Bitmap(stream);
this.MyButton.Image = bmp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...