मैं यह पता लगाने की कोशिश कर रहा हूं कि हमारे सिल्वरलाइट 4 एप्लिकेशन में रनटाइम पर प्रोग्रामेटिक रूप से थीम कैसे लागू करें। मुझे लगा कि यह एक्सएएमएल से संसाधन शब्दकोश लोड करने और एप्लिकेशन के मर्ज किए गए शब्दकोशों के साथ विलय करने जितना सरल होना चाहिए।XamlReader.Load क्यों Silverlight 4 में मेरी संलग्न संपत्ति को पहचानने में असमर्थ है?
var themeUri = new Uri(
"OurApp;component/Themes/Classic/Theme.xaml", UriKind.Relative);
var resourceInfo = GetResourceStream(themeUri);
using (var stream = resourceInfo.Stream)
{
using (var reader = new StreamReader(stream))
{
var xamlText = reader.ReadToEnd();
var dict = XamlReader.Load(xamlText) as ResourceDictionary;
Resources.MergedDictionaries.Add(dict);
}
}
दुर्भाग्य से, एक XamlParseException
XamlReader.Load
को कॉल के दौरान उठाया है:
कुर्की संपत्ति 'फू' प्रकार 'बार' में नहीं मिला था यहाँ मेरी कोड अब तक है।
यह ठीक से जुड़ी ठीक से घोषित है, और XAML में नाम स्थान घोषणा सही ढंग से संदर्भित करती आवश्यक नाम स्थान। अटैचमेंट एक्सएएमएल ऐप.एक्सएमएल मार्कअप के माध्यम से विलय किए गए शब्दकोशों में लोड होने पर ठीक काम करता है।
<ResourceDictionary xmlns:u="clr-namespace:Company.Product.Utils"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ControlPanelStyle" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Grid Margin="0" u:Bar.Foo="True">
<!-- Stuff and things -->
<ContentPresenter Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
क्यों है संलग्न संपत्ति के संदर्भ में जब रनटाइम पर XAML लोड हो रहा है जब यह ठीक काम कर रहा है जब काम नहीं कर रहा:
यहाँ XAML जो मैं रनटाइम पर लोड करने के लिए कोशिश कर रहा हूँ की एक संक्षिप्त प्रतिलिपि है "स्थिर रूप से" लोड किया गया?