在Silverlight 5中的合并ResourceDictonaries中使用样式

时间:2012-05-30 20:23:59

标签: silverlight styles resourcedictionary

我的app.xaml中有很多样式,在我的SL5应用程序中我们的页面都使用得很好。我想将这些样式移到多个资源字典中,以使其更易于管理和使用。

首先,我将一个样式复制到项目中/Styles/ButtonStyles.xaml页面中的新资源字典...一个片段如下所示:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Style x:Key="RegistrationsRolloverImage" TargetType="Button">
    <Setter Property="Template">...</Setter>
  </Style>

  <Style x:Key="FinancialLedgerRolloverImage" TargetType="Button">
    <Setter Property="Template">...</Setter>
  </Style>

</ResourceDictionary>

接下来,我将以下内容添加到我的App.xaml中:

<ResourceDictionary x:Key="MergedStyles">
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Styles/ButtonStyles.xaml" />
  </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

它迫使我在ResourceDictionary标记中添加一个x:键,因为我不断收到构建错误。现在它构建,但使用该样式的按钮没有得到样式。事实上,我收到一个JS错误,它无法在我的资源字典中找到具有两个样式名称的样式。如果它们在App.xaml中,它们可以正常工作,但如果它们在单独的资源字典中则不行。我反映了生成的DLL,可以看到DLL中的styles / buttonstyles.xaml。

不知所措......并且无法弄清楚出了什么问题。想法?

2 个答案:

答案 0 :(得分:2)

他们是否属于同一个项目?在app.xaml中尝试更类似的内容;

<Application.Resources>
   <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/YourResDictionaryContaining.Proj.Name;component/Styles/ButtonStyles.xaml" />
      </ResourceDictionary.MergedDictionaries>
   </ResourceDictionary>
</Application.Resources>

我必须这样做才能将resourcedict存储在一个项目中,然后将其添加到每个其他项目的app.xaml中,以使它们在全局范围内可用。目前,我通过这种方式在同一个解决方案中运行了大约6个Resource Dicts acros 20个项目,并且效果很好。

答案 1 :(得分:1)

在完整的App.xaml sample中,您需要使用“本地”资源。 但是当你有"local" resources并且想要合并资源目录时,systax会有所不同。

试试这样:

<Application ...>
  <Application.Resources>
    <ResourceDictionary>

      <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />

      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Styles/ButtonStyles.xaml" />
      </ResourceDictionary.MergedDictionaries>

      <Style x:Key="BaseTextBlock" TargetType="TextBlock">
         ...
      </Style>

    </ResourceDictionary>
  </Application.Resources>
</Application>