在代码中更改/添加资源字典,请帮忙

时间:2011-02-27 09:38:07

标签: silverlight-4.0 c#-4.0 resourcedictionary

我正在开发一个silverlight应用程序,我仍然是这个的初学者。 我想知道是否有可能在后面的代码中更改资源字典的源代码(C#) 在App.xaml中? 我已经尝试了下面的代码,但得到一个例外,我从WCF服务获取样式文件夹名称,该变量称为Style(这包含文件夹的名称)

ResourceDictionary rDictionary = this.Resources.MergedDictionaries[0];
        rDictionary.Source = new Uri(string.Format("Resources/Styles/{0}/Styles.xaml", style), UriKind.Relative);
        this.Resources.MergedDictionaries.Add(rDictionary);

我在

收到错误
rDictionary.Source = new Uri(string.Format("Resources/{0}/Styles.xaml", "Default"), UriKind.RelativeOrAbsolute);

哪些内容

System.Exception: Error HRESULT E_FAIL has been returned from a call to a COM component.
   at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
   at MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, String s)
   at MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)
   at System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
   at System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
   at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
   at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
   at System.Windows.ResourceDictionary.set_Source(Uri value)
   at FCStarFish.App..ctor()

3 个答案:

答案 0 :(得分:4)

这是否有效

<Application.Resources>
    <ResourceDictionary x:Key="resourcestyles">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary /> <!-- Dummy, this is the one we will replace -->
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

然后我们在[0]中放置一个ResourceDictionary(我们的虚拟ResourceDictionary是)。

加载或替换样式字典(使用app.xaml.cs中Application_Startup中的默认样式加载它)

var rDictionary = new ResourceDictionary();
rDictionary.Source = new Uri(string.Format("/MyApp;component/Resources/Styles/{0}/Styles.xaml", style), UriKind.Relative);
this.Resources.MergedDictionaries[0] = rDictionary;

将MyApp替换为您的应用程序名称。

答案 1 :(得分:1)

首先按照NateTheGreat中提到的步骤进行操作,并在前面添加“/”前面的UriStirng。它应该看起来像:

ResourceDictionary rDictionary = this.Resources.MergedDictionaries[0];
        rDictionary.Source = new Uri(string.Format("/Resources/Styles/{0}/Styles.xaml", style), UriKind.Relative);
        this.Resources.MergedDictionaries.Add(rDictionary);

答案 2 :(得分:0)

我刚遇到这个问题。在我的例子中,解决方案是将资源字典XAML文件的构建操作更改为“内容”,将复制到输出目录更改为“如果更新则复制”,将自定义工具更改为空字符串。默认设置分别设置为Page / Do not copy / MSBuild:Compile。