2012-11-01 16 views
7

मैं एक अलग DLL में मेरे ऐप की संसाधनों रखने के लिए और उन्हें अपने मुख्य EXE में संदर्भ App.xaml में कुछ इस तरह का उपयोग कर: -डब्ल्यूपीएफ हर उपयोगकर्ता नियंत्रण में संसाधन शब्दकोश विलय - बुरा विचार?

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="pack://application:,,,/MyThemesAssembly;component/Themes/Generic.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

जब मैं एक खिड़की मुख्य EXE परियोजना में है कि संपादित करते हैं, VS2010 डिजाइनर अन्य असेंबली से किसी भी संसाधन को मान्यता नहीं देता है, इसलिए मुझे कोई स्टाइल लागू नहीं होता है (वास्तव में एक मुद्दा नहीं है क्योंकि मैं हमेशा XAML दृश्य में काम करता हूं)। हालांकि Resharper इन बाह्य संसाधन नामों को या तो पहचान नहीं पाता है, जिसके परिणामस्वरूप संसाधन नामों के तहत बहुत सारे squiggles जब मैं XAML संपादित कर रहा हूं।

मुझे पता चला है कि मैं प्रत्येक विंडो और उपयोगकर्ता नियंत्रण में उपरोक्त एक्सएएमएल सहित वीएस डिजाइनर और रिशेर्पर दोनों को ठीक कर सकता हूं, लेकिन क्या यह स्मृति और/या प्रदर्शन पर प्रतिकूल प्रभाव डालने वाला है? क्या प्रत्येक विंडो को संसाधनों की एक अलग प्रति मिल जाएगी?

+0

ठीक है, आईडीई और उपकरणों में कीड़े आपके कोड को प्रभावित नहीं करनी चाहिए। इसके अलावा, प्रत्येक नियंत्रण में संसाधन शब्दकोश समेत एक त्रुटि-प्रवण तरीका है (यदि आप किसी अन्य को जोड़ने के लिए शब्दकोश का नाम बदलने का निर्णय लेते हैं?)। – Vlad

+0

हालांकि मैं डिजाइन मोड में समस्या के आसपास काम कर रहे एक quirk जोड़ने की कोशिश करता हूँ। (शायद यह मदद करेगा: 'पब्लिक क्लास MyUserControlBase: UserControl {public MyUserControlBase() {if (DesignerProperties.GetIsInDesignMode (यह)) LoadExternalDoriesExplicitlyHere(); ... ') – Vlad

+1

@Vlad मैंने squiggles के साथ रहना सीखा है - यह Resharper फिक्सिंग के दृष्टिकोण वास्तव में सिर्फ "अच्छा है" है। मुझे नहीं लगता कि संसाधनों का नामकरण/जोड़ना एक मुद्दा होगा - उपरोक्त मेरे एक्सएएमएल उदाहरण में, "जेनेरिक.एक्सएएमएल" स्वयं उस असेंबली में अन्य संसाधनों का एक भार विलीन कर देता है, इसलिए नए जोड़ना आसान है। मैं इस बारे में अधिक चिंतित हूं कि प्रत्येक विंडो में <मर्ज किए गए शब्दकोश> ऐप की स्मृति/प्रदर्शन (या वीएस -2010) को उड़ाने जा रहा है या नहीं। –

उत्तर

2

वीएस2012 का उपयोग करने का प्रयास करें।

इस
<Application x:Class="WpfPackDictionaries.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="pack://application:,,,/WPFCommonLibrary;component/Vectors/Vectors.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

तब मेरे mainwindow.xaml में मेरे पास है:

मैं एक परीक्षण परियोजना जो मैं उपयोग कर रहा था जो मैं संसाधन शब्दकोश एक बाहरी विधानसभा से और मेरे App.xaml में विलय मैं इस राशि कर रहा था है जहां पथ एक शैली ModifiablePathStyle में खींचती है:

<Window xmlns:Control="clr-namespace:WPF.Common.Control;assembly=WPFCommonLibrary" x:Class="WpfPackDictionaries.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 

    <Grid> 
     <Path Style="{StaticResource ModifiablePathStyle}" Fill="Red"/> 
     <Control:Jabberwocky /> 
    </Grid> 
</Window> 

Intellisense/Resharper (V7.1 10/31 (शुरुआती एक्सेस बिल्ड)) शैली को पहचानता है और मेरे पास कोई squigglies है:

enter image description here

इसलिए आपने वीएस2012 में काम करने की कोशिश की है?

+0

हम अंततः VS2012 पर जा रहे हैं, लेकिन अभी भी प्रबंधन से $$$ की प्रतीक्षा कर रहे हैं! –

+0

@AndrewStephens प्रबंधन का सम्मान करने में सभी बेहतरीन काम किए जाते हैं। ;-) – OmegaMan

+0

@AndrewStephens अपने xaml काम के लिए VS2012 एक्सप्रेस संस्करण का उपयोग करें। यह अभी भी .NET 3.5/4.0 परियोजनाओं को संकलित कर सकता है .prj या .sln प्रोजेक्ट्स को बदल रहा है। – OmegaMan

3

हमें प्रत्येक उपयोगकर्ता नियंत्रण/दृश्य में संदर्भित संसाधनों के उपयोग के साथ हमारे आवेदन में कोई समस्या थी। मैं इसके खिलाफ सलाह देता हूं। हमने साझा अनुप्रयोग संसाधनों के उपयोग से 300 एमबी की तरह हमारे एप्लिकेशन की मेमोरी पदचिह्न को कम करने में कामयाब रहे। ऐसा लगता है कि आप संसाधन एप्लिकेशन को अपने आवेदन में प्रत्येक उपयोगकर्ता नियंत्रण के लिए तुरंत चालू कर देंगे। बस वीएस डिजाइनर को ठीक करने के लिए ऐसा न करें।

2

वीएस2012 संसाधनों को देखने में सक्षम है क्योंकि वीएस एक्सएएमएल डिज़ाइनर आपके कोड को डिज़ाइन-टाइम में लोड करता है और निष्पादित करता है, इसलिए वीएस निरीक्षण कर सकता है कि रनटाइम पर कौन से संसाधन उपलब्ध होंगे। ReSharper कभी भी डिज़ाइन-टाइम कोड निष्पादन का उपयोग नहीं करता है (क्योंकि इसके लिए आपके कोड को हमेशा संगत स्थिति में होना आवश्यक है) इसलिए XAML समर्थन थोड़ा अधिक जटिल कार्य बन गया।

रीशेपर 8.0 बीएएमएल विघटन के लिए समर्थन लागू किया गया है और एक्सएएमएल फाइलों की सूची निकालता है और संदर्भित बाइनरी असेंबली से एक्सएएमएल संसाधनों को हल करता है।

संबंधित मुद्दे