همانطور که اطلاع دارید که طراح xaml و Intellisense در Visual Studio، توانایی شناسایی Resources هایی را که از Libraryهای خارجی میآیند، ندارد. یعنی اگر شما بخواهید از StaticResourceها یا DynamicResourceها استفاده کنید، با یک لیست خالی در Intellisense مواجه خواهید شد و مجبور هستید تا نام Resource را خودتان بطور کامل تایپ کنید. این مشکل بیشتر بخاطر ساختار MergedDictionaryها و تعداد بالای فایلهای Resource پیش میآید. برای حل این مشکل چندین راه کار وجود دارد:
- این فایل را به پوشه Properties پروژه منتقل کنید.
- پروژه را Unload کنید و سپس راست کلیک کرده و گزینه Edit CsProj را بزنید و کدهای زیر را جایگزین کدهای DesignTimeResources قبلی کنید.
- پروژه را ذخیره کنید و دوباره Reload کنید.
- فایل دیکشنری DesignTimeResources .xaml را باز کنید و محتوای آن را به این صورت تغییر دهید.
دقت کنید که به جای خط زیر
باید آدرس منابع خود را وارد کنید.
حالا بهراحتی میتوانید منابع را در کل پروژه شناسایی کنید.
- این مشکل توسط اینجانب به تیم توسعه گزارش شد و در نسخه 16.4 پیش نمایش 3 ویژوال استودیو مرتفع گردیدهاست. اما همچنان مشکل کوچکی دارد که گزارش شده و در حال بررسی میباشد.
- تمامی استایلها و منابع خود را در یک فایل xaml قرار دهید و از ایجاد چندین فایل جدا، خودداری کنید. جهت جلوگیری از بههم ریختگی و سردرگمی، میتوانید از Region بندی کدها استفاده کنید.
- با استفاده از این روش میتوانید منابع را در حالت طراحی، شناسایی کنید. اما روش پایدار و قابل اطمینانی نیست.
- این فایل را به پوشه Properties پروژه منتقل کنید.
- پروژه را Unload کنید و سپس راست کلیک کرده و گزینه Edit CsProj را بزنید و کدهای زیر را جایگزین کدهای DesignTimeResources قبلی کنید.
<ItemGroup> <Page Include="Properties\DesignTimeResources.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> <ContainsDesignTimeResources>true</ContainsDesignTimeResources> </Page> </ItemGroup>
- فایل دیکشنری DesignTimeResources .xaml را باز کنید و محتوای آن را به این صورت تغییر دهید.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/MyAssembly;component/Presentation/Common/Resources/Main.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary>
<ResourceDictionary Source="/MyAssembly;component/Presentation/Common/Resources/Main.xaml"/>
حالا بهراحتی میتوانید منابع را در کل پروژه شناسایی کنید.