2009-02-17 16 views
7

मेरे पास एक दृश्य ब्रश है जो आकृतियों का एक समूह है, जिसका मुख्य रंग एक गतिशील संसाधन है - इसलिए आकार माईशिप और रंग, माईकोलर है जिसे आकार वस्तु द्वारा संदर्भित किया गया है।
मेरी समस्या यह है कि जब मैं इसके लिए रंग अपडेट करता हूं - यह केवल पहली बार होता है जब आकार लोड होता है (रंग को पहले सेट करने की आवश्यकता होती है) हालांकि जितना मैं रंग बदलता हूं, वह गतिशील संसाधन को अपडेट नहीं करेगा जो उपयोग करता है रंग - मैं यह काम कैसे कर सकता हूं?
किसी अन्य गतिशील संसाधन के भीतर बस एक गतिशील संसाधन कार्य करने की आवश्यकता है और जब मैं रंग बदलता हूं तो दोनों अपडेट होते हैं।
मुझे नहीं पता कि यह कैसे काम करने के लिए है - मैंने WPF के लिए रंग-पिकर बनाने में समय बिताया केवल यह पता लगाने के लिए कि मैं इस आइटम का रंग नहीं बदल सकता - 1-टियर संसाधन काम जहां मैंने ब्रश/रंग सीधे सेट किया लेकिन नहीं एक अन्य वस्तु या 2-टियर संसाधन के भीतर एक रंग।गतिशील संसाधन के भीतर गतिशील संसाधन को कैसे अपडेट करें?

संपादित करें: मेरी समस्या एक अलग संसाधन/शब्दकोश में इनका उपयोग करने के लिए विशिष्ट प्रतीत होती है क्योंकि मेरे प्रोग्राम को इस आइटम को विंडो से नहीं ले जाने की आवश्यकता है, जिसका मुख्य उदाहरण उल्लिखित है जब मायकोलर अलग है संसाधन।

उत्तर

5

जब तक मैं स्थिति को गलत समझता हूं, ठीक वैसे ही आप कामों के बारे में क्या बात कर रहे हैं। मैं सिर्फ यह पता करने की कोशिश की इस Xaml साथ:

<Window x:Class="ConditionalTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <SolidColorBrush x:Key="MyColor" Color="Aqua" /> 

     <VisualBrush x:Key="MyBrush"> 
      <VisualBrush.Visual> 
       <Ellipse Height="50" Width="100" Fill="{DynamicResource MyColor}" /> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Window.Resources> 
    <Grid Background="{DynamicResource MyBrush}"> 
     <Button Height="30" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Content="ChangeColor" Click="Button_Click" /> 
    </Grid> 
</Window> 

और फिर उस बटन के लिए क्लिक हैंडलर में रंग बदल:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ((SolidColorBrush)Resources["MyColor"]).Color = Colors.Purple; 
} 

और यह एक विजेता की तरह काम किया।

+0

इसके लिए धन्यवाद - यह संसाधन तब नहीं है जब संसाधन संसाधन संसाधन में है, यह मेरी समस्या है, मैंने संसाधनों को विंडो में स्थानांतरित कर दिया है। आपके उदाहरण जैसे स्रोत - यह काम करता है हालांकि यह कक्षा में उपयोग योग्य होना चाहिए मेरा सॉफ़्टवेयर - इस – RoguePlanetoid

+0

का उल्लेख करने के लिए मेरे प्रश्न को संपादित करेगा। मेरा समाधान संसाधन को विंडो को संग्रहीत करना था। स्रोत इस उदाहरण के रूप में दिखाता है और यह आपके उदाहरण के रूप में काम करता है - लेकिन अभी भी संसाधनों को सभी संसाधनों को संसाधन.एक्सएएमएल में रखना पसंद है, लेकिन यह काम करता है और यही मायने रखता है। – RoguePlanetoid

+0

क्या किसी ने कभी भी संसाधन शब्दकोश के भीतर इसका उपयोग करने का तरीका खोजा है? – tofutim

0

क्या आप संसाधन शब्दकोश में रंग बदलने का प्रयास कर रहे हैं इसका एक उदाहरण पोस्ट कर सकते हैं?

मैं एक नमूना अनुप्रयोग बनाने के लिए और संसाधन मूल्य ऐसा लगता है कि संसाधन शब्दकोश में SolidColorBrush जमे हुए किया गया है तो यह बदला नहीं जा सकता बदलने के लिए प्रयास करते हैं। इस के आसपास जाने के लिए मैंने बस नया मान एक नए सॉलिडकॉलर ब्रश पर सेट किया है।

+0

प्रत्येक बार एक नया ब्रश बनाना काम करेगा हालांकि यह एक गतिशील संसाधन का उपयोग करता है क्योंकि प्रत्येक बार रंग समर्थन के साथ जटिल आकार के लिए संसाधन को पुनर्निर्मित करने के रूप में डिम आइटम को नई सॉलिडकॉलर ब्रश (माईकोलर) के रूप में सरल नहीं है। – RoguePlanetoid

+0

ब्रश तो बदलने का एकमात्र तरीका जमे हुए किया गया है यदि यह एक नया एक बनाने के लिए है। आप क्लोन विधि का उपयोग कर सकते हैं जो एक प्रतिलिपि बनायेगा, इस तरह आपको केवल उन गुणों को बदलना होगा जिन्हें आप बदलना चाहते हैं। क्या आप ब्रश को बदलने की कोशिश करने का एक उदाहरण पोस्ट कर सकते हैं? –

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