كيف يمكنني الحصول على صورة نقطية من أحد الموارد؟

StackOverflow https://stackoverflow.com/questions/857732

سؤال

يتضمن التجميع الخاص بي صورة تحتوي على BuildAction==Resource.أريد الحصول على صورة نقطية من هذا المورد المضمن.

يمكنني تحميل صورة نقطية من ملف مثل هذا:

var bitmap = new BitmapImage(new Uri(path));

ولكن كيف يمكنني إنشاء Uri الذي يشير إلى صورة المورد المضمنة؟

عندما أحاول إنشاء "حزمة URI' (على سبيل المثال pack://application:,,,/MyImage.png أو pack://application:,,,/MyAssembly;component/MyImage.png)، تم طرح استثناء:

System.Urifformatexception "URI غير صالح:كان من المتوقع وجود منفذ نظرًا لوجود نقطتين (':') ولكن تعذر تحليل المنفذ."

لقد وجدت الإصلاح لـ UriFormatException في هذا مشاركة مدونة

ومع ذلك، مع تطبيق هذا الإصلاح، ما زلت أحصل على استثناءات عند محاولة تحميل صورة نقطية من حزمة URI.

عند استخدام pack://application:,,,/Image.png التنسيق، أحصل على NullReferenceException، وعند استخدام pack://application:,,,/AssemblyName;component/Image.png التنسيق، أحصل على NotSupportedException "لم يتم التعرف على بادئة Uri".


ملخصكانت مشكلتي أنني كنت أحاول استخدام "حزمة URI" في عملية قبل إنشاء مثيل لأي عنصر تحكم/نافذة/وما إلى ذلك في WPF، لذلك لم يتم تسجيل نظام URI "الحزمة" بعد (يجب أيضًا عدم تسجيل "أشياء" أخرى تتطلبها WPF يمكن ضبطه أيضًا، لأن تسجيل نظام الحزمة يدويًا لا يؤدي في حد ذاته إلى حل المشكلة).كان الحل هو الانتظار حتى بعد إنشاء عنصر تحكم مستخدم WPF الخاص بي لاستخدام عناوين URL للحزمة.

هل كانت مفيدة؟

المحلول

صفحة MSDN هذه يحتوي على جميع المعلومات التي قد ترغب في معرفتها حول معرفات الموارد المنتظمة (URIs) للمورد في WPF (غالبًا ما تسمى معرفات URI الخاصة بالحزمة).سوف ترغب في استخدامها عناوين URL النسبية في كثير من الأحيان على الأرجح، لذلك انظر الجدول 4, ، والتي ينبغي أن تكون ذات فائدة خاصة.

إذا كنت تريد نظرة عامة أكثر إيجازًا على عناوين URL للمورد (الحزمة)، فراجع هذا بلوق وظيفة.يوضح أن بناء الجملة بسيط نسبيًا:

pack://application:,,,/ResourceFile.xaml

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

ومع ذلك، هناك بعض المراوغات التي يجب حلها (في تجربتي)، لذا غالبًا ما يتطلب العثور على عنوان URI الصحيح للمورد القليل من التجارب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top