سؤال

لدي الموارد ملفات قاموس (MenuTemplate.xaml ، ButtonTemplate.xaml ، الخ) التي أريد استخدامها في عدة تطبيقات منفصلة.يمكنني إضافتها إلى التطبيقات الجمعيات ، ولكن من الأفضل إذا كنت تجميع هذه الموارد في الجمعية ويكون لي التطبيقات مرجع له, أليس كذلك ؟

بعد الموارد الجمعية بنيت كيف يمكنني الرجوع إليها في التطبيق.xaml من التطبيقات ؟ حاليا أنا استخدم ResourceDictionary.MergedDictionaries إلى دمج الفرد في القاموس الملفات.لو لهم في الجمعية ، كيف يمكنني الرجوع إليها في xaml ؟

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

المحلول

وتحقق من حزمة URI جملة . إذا كنت تريد شيئا من هذا القبيل:

<ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/>

نصائح أخرى

على سبيل المثال, فقط لجعل هذا 15 ثانية الإجابة -

نقول لديك "الأساليب.xaml" في WPF مكتبة باسم "المشترك" و كنت ترغب في استخدام هذا التطبيق الرئيسي للمشروع:

  1. إضافة مرجع من المشروع الرئيسي "المشتركة" المشروع
  2. التطبيق الخاص بك.xaml يجب أن تحتوي على:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/Common;component/styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

هتافات

أنا أعمل مع .NET 4.5 و لم أستطع الحصول على هذا العمل...كنت باستخدام WPF التحكم المخصصة للمكتبة.بالنسبة لي فقد عملت في النهاية...

<ResourceDictionary Source="/MyAssembly;component/mytheme.xaml" />

المصدر: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/11a42336-8d87-4656-91a3-275413d3cc19

المورد فقط DLL خيارا بالنسبة لك.ولكن لا يشترط بالضرورة إلا إذا كنت ترغب في تعديل الموارد بدون ترجمة التطبيقات.فقط واحد مشترك ResourceDictionary الملف هو أيضا خيار.ذلك يعتمد على كيفية غالبا ما كنت التغيير الموارد وغيرها.

<ResourceDictionary Source="pack://application:,,,/
     <MyAssembly>;component/<FolderStructureInAssembly>/<ResourceFile.xaml>"/>

MyAssembly - مجرد اسم التجميع دون تمديد

FolderStructureInAssembly - إذا كان لديك الموارد في folde تحديد بنية المجلد

عندما كنت تفعل هذا فمن الأفضل أن علم siteOfOrigin وكذلك.

WPF يدعم اثنين من السلطات:تطبيق:/// و siteoforigin:///.تطبيق:/// السلطة بتحديد تطبيق ملفات البيانات التي معروفة في وقت الترجمة ، بما في ذلك الموارد محتوى الملفات.على siteoforigin:/// سلطة تحدد الموقع المنشأ الملفات.نطاق كل السلطة هو مبين في الشكل التالي.

enter image description here

لUWP:

<ResourceDictionary Source="ms-appx:///##Namespace.External.Assembly##/##FOLDER##/##FILE##.xaml" />

باستخدام XAML:

إذا كنت تعرف الأخرى assembly هيكل تريد resources في c# مدونة, ثم استخدام رمز أدناه:

 ResourceDictionary dictionary = new ResourceDictionary();
 dictionary.Source = new Uri("pack://application:,,,/WpfControlLibrary1;Component/RD1.xaml", UriKind.Absolute);
 foreach (var item in dictionary.Values)
 {
    //operations
 }

الإخراج: إذا كنا نريد استخدام ResourceDictionary RD1.xaml من المشروع WpfControlLibrary1 في StackOverflowApp المشروع.

هيكل من المشاريع:

Structure of Projects

المورد قاموس: Resource Dictionary

رمز الإخراج:

Output

PS: كل ResourceDictionary الملفات يجب أن يكون Build Action كما 'Resource'أو 'Page'.

باستخدام C#:

إذا كان أي شخص يريد الحل في بحتة التعليمات البرمجية c# ثم انظر بلدي هذا الحل.

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