2009-03-12 18 views
13

में कोड में बनाए गए एक्सएएमएल में स्थैतिक ऑब्जेक्ट्स का उपयोग करके मैं इसे सिल्वरलाइट में काम करने के लिए नहीं मिला, इसलिए मैंने दो परीक्षण परियोजनाएं बनाईं। एक साधारण डब्ल्यूपीएफ प्रोजेक्ट और एक साधारण सिल्वरलाइट प्रोजेक्ट जो दोनों केवल एक चीज करते हैं: कोड में एक सार्वजनिक स्थैतिक रीडोनली वैरिएबल सेट करें, और इसे पूरी तरह से बेयर हड्डियों XAML में उपयोग करें। डब्ल्यूपीएफ में, बिना किसी झुकाव के काम करता है। सिल्वरलाइट में, मैं निम्नलिखित संकलक चेतावनी और रनटाइम त्रुटि मिलती है:सिल्वरलाइट

चेतावनी 2 टैग 'स्टेटिक' XML नामस्थान 'http://schemas.microsoft.com/winfx/2006/xaml' में मौजूद नहीं है ...

और

अमान्य विशेषता मूल्य {x: स्टेटिक सिल्वरलाइट अनुप्रयोग 3: पेज टेस्ट} संपत्ति टेक्स्ट के लिए। [रेखा: 7 स्थिति: 25]

मुझे लगता है कि यह सिल्वरलाइट 2 में समर्थित नहीं है, या क्या मुझे बस कुछ आसान याद आ रही है? यहाँ दोनों ही मामले में के लिए पूर्ण कोड यह उत्तरार्द्ध है:

public partial class Window1 : Window 
{ 
    public static readonly string Test = "test"; 
    public Window1() 
    { 
     InitializeComponent(); 
    } 
} 

<Window x:Class="WpfApplication4.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" 
     xmlns:WpfApplication4="clr-namespace:WpfApplication4">  
    <Grid> 
     <TextBlock Text="{x:Static WpfApplication4:Window1.Test}" /> 
    </Grid> 
</Window> 

और यहाँ SL संस्करण है:

public partial class Page : UserControl 
    { 
     public static readonly string Test = "test"; 
     public Page() 
     { 
      InitializeComponent(); 
     } 
    } 

<UserControl x:Class="SilverlightApplication3.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:SilverlightApplication3="clr-namespace:SilverlightApplication3" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <TextBlock Text="{x:Static SilverlightApplication3:Page.Test}" /> 
    </Grid> 
</UserControl> 

उत्तर

5

दुर्भाग्य से, यह सिल्वरलाइट तरह लग रहा है स्थिर गुणों के बंधन का समर्थन नहीं करता: What is the {x:Static sdfsdf} equivalent?

+2

वह बेकार है। इस लिखाई के लिए धन्यवाद। जब मैंने खोज की, तो मुझे कुछ भी निश्चित नहीं मिला, लेकिन जिस व्यक्ति ने आपके द्वारा लिंक की गई पोस्ट में जवाब दिया वह SL – Rich

+2

पर अधिकार है क्यों WhyTF इसका समर्थन नहीं करता है ?! –

6

दुर्भाग्य से सिल्वरलाइट की कार्यक्षमता के संबंध में कई सीमाएं हैं और आपने उनमें से एक पाया है। StaticMarkupExpression SL2 द्वारा समर्थित नहीं है। आप इसे स्वयं भी परिभाषित नहीं कर सकते हैं।

उदा। एमएस से पुरुष: http://blogs.msdn.com/edmaia/archive/2008/11/23/animating-objects-visibility-in-silverlight.aspx

चाल

class Helper{ 
    public string Value {get{return Page.Test;}} 

// implement INotifyPropertyChange if you want updates 
} 

और फिर

<Grid.Resources> 
    <somexmlns:Helper x:Key="Helper"/> 
</Grid.Resources> 

<TextBlock Text="{Binding Value, Source={StaticResource Helper}}"/> 
+0

यह एक साधारण स्ट्रिंग के साथ आपके उदाहरण में बहुत अच्छा काम करता है, लेकिन जब मैं रंग ऑब्जेक्ट या रंग के स्ट्रिंग प्रस्तुति का उपयोग करने का प्रयास करता हूं जहां मैं XAML (GradientStop Color = "# FAF6 में हार्ड कोड में सक्षम हूं ...), मुझे निम्न त्रुटि मिलती है: AG_E_PARSER_BAD_PROPERTY_VALUE। सीमाएं क्या हैं? – Rich

+0

पूर्ण वाक्यविन्यास का उपयोग करें। एक स्ट्रिंग रंग ऑब्जेक्ट नहीं है, इसलिए आप इसे एक असाइन नहीं कर सकते हैं।लेकिन अगर आप पूर्ण कोण ब्रैकेट सिंटैक्स का उपयोग करते हैं तो आप एक रंग * ऑब्जेक्ट * निर्दिष्ट कर सकते हैं और यह ठीक काम करेगा। या, ब्लेंड जैसे जेनरेटर का उपयोग करें और जिस तरह से यह उन गुणों को चिह्नित करता है, जिनमें संक्षिप्त वाक्यविन्यास में रंग ऑब्जेक्ट होते हैं। –

+0

'सार्वजनिक स्थैतिक स्ट्रिंग वैल्यू {get {return page.Test;}}' –

3

आप वास्तव में जब तक स्थिर गुणों के बाध्य कर सकते हैं के रूप में कक्षा एक स्थिर नहीं है जैसे किसी चीज़ का इस्तेमाल हो सकता है कक्षा। तो हेल्पर क्लास के पिछले उदाहरण का उपयोग करके:

public class Helper 
{ 
    public static string Value{ get {return Page.Test;} } 
} 

एक्सएएमएल वही रहेगा।

+0

हाय सैम भी काम करता है, क्या यह बाध्यकारी को सूचित करेगा यदि 'Page.Test' का मान अपडेट किया गया है? –

+0

हमम, मैं इसे काम नहीं कर सकता। Xaml वाक्यविन्यास क्या है, क्या आप इसे –

1

मैंने अभी देखा है कि आपके पास रंग को बाध्य करने के बारे में एक माध्यमिक प्रश्न था। मुझे नहीं लगता कि यह सिल्वरलाइट में किया जा सकता है। मुझे यकीन है कि सिल्वरलाइट में बाध्यकारी लक्ष्य के लिए न्यूनतम आवश्यकता फ्रेमवर्क एलिमेंट है।

+0

हाँ जोड़ सकते हैं ... और अब इसे देखकर महीनों बाद, अगर मैं जो रंग सोचता हूं उसे बांधना चाहता हूं क्योंकि मैं इसे हेक्स स्ट्रिंग के रूप में घोषित कर सकता हूं, तो यह वास्तव में ब्रश ऑब्जेक्ट है व्हेन ऑल इज़ सैड एंड डन। मुझे यह भी याद नहीं है कि मैं कौन सा प्रोजेक्ट इस सवाल के लिए पूछ रहा था, लेकिन अगर मुझे अब ऐसा करने की ज़रूरत है, तो मैं कल्पना करूंगा कि अगर मैं रंग के रंग या स्ट्रिंग प्रस्तुति के बजाय स्थिर ब्रश ऑब्जेक्ट का खुलासा करता हूं तो यह काम करेगा। – Rich

-2

एक स्थैतिक वस्तु केवल एक बार तत्काल हो जाएगी और कार्यक्रम के अंत तक जारी रहेगी। एक स्थैतिक वस्तु दायरे में नहीं होने पर भी अपने राज्य को बरकरार रख सकती है, लेकिन केवल अपने स्थानीय दायरे में दिखाई दे सकती है।

+2

बस इतना ही समझते हैं कि आपके वास्तविक रूप से सही उत्तर को नकारात्मक क्यों चुना गया है, हम सी व्युत्पन्न भाषाओं में स्थिर कीवर्ड के बारे में बात नहीं कर रहे हैं, हम स्टेटिक एक्स्टेंशन क्लास के एक्सएएमएल में उपयोग के बारे में बात कर रहे हैं जो क्लास गुणों के मार्कअप संदर्भों का समर्थन करता है जो स्थैतिक हैं इस अर्थ में आपका उत्तर वर्णन करता है। –