【问题标题】:Using Styles in merged ResourceDictonaries in Silverlight 5在 Silverlight 5 中使用合并的 ResourceDictonaries 中的样式
【发布时间】:2012-05-30 20:23:58
【问题描述】:

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

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

<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:key,因为我不断收到构建错误。现在它构建了,但是使用该样式的按钮没有获得该样式。事实上,我收到了一个 JS 错误,它在我的资源字典中找不到具有两种样式名称的样式。如果它们在 App.xaml 中,它们就可以正常工作,但如果它们在单独的资源字典中,则不能。我反映了生成的 DLL,可以看到 DLL 中的样式/buttonstyles.xaml。

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

【问题讨论】:

  • 你能在某处发布完整的App.xaml 吗?因为它应该可以工作并且您不需要向您的ResourceDictionary 添加密钥...也许您已经在ResourceDictionary
  • 同意...令人困惑的是它应该可以正常工作。这是整个 app.xaml:pastebin.com/iakhFULy

标签: silverlight styles resourcedictionary


【解决方案1】:

他们在同一个项目中吗?在你的 app.xaml 中尝试更多类似的东西;

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

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

【讨论】:

  • 这将是最后的手段,但我想知道为什么我所做的没有工作......不过感谢 sn-p!
  • 一个项目中的所有内容都在同一个解决方案中吗?
  • 是的,它们都在同一个项目(和同一个解决方案)中。
【解决方案2】:

在完整的App.xaml sample 中,您希望使用“本地”资源。 但是当你有"local" resources 并且你想合并一个资源目录时,系统税有点不同。

试试这样:

<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>

【讨论】:

  • 修复了它。谢谢!现在我看到了我在另一个项目中所做的不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2023-03-25
  • 2012-06-01
  • 2011-03-03
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多