silverlight - 如何在SL4页面中使用键定义资源和MergeDictionary

标签 silverlight silverlight-4.0 styles

这可能是一个非常愚蠢的问题,但我无法弄清楚。

我有一个定义了MergeDictionary的页面:

  <navigation:Page.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </navigation:Page.Resources>

并且我在XAML中像这样毫无问题地引用了TourneySetupStyles.xaml中的样式:
<TextBlock Text="Tourney Name:" Style="{StaticResource TourneySetupTextStyle}" />

但是,现在我需要添加另一个页面资源,如下所示:








但是设计师现在发出警告:
“设计人员不支持将没有键的'ResourceDictionary'项目与其他项混合在一起的加载字典。请确保'Resources'属性不包含没有键的'ResourceDictionary'项目,或者确保'ResourceDictionary' item是集合中的唯一元素。”

因此,我向我的ResourceDictionary添加了一个 key ,如下所示:
   <navigation:Page.Resources>
         <local:Tournament x:Key="tournament" />
        <ResourceDictionary x:Key="whatever">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </navigation:Page.Resources>

警告消失了。但是现在我对TourneySetupStyles中的样式的引用不再起作用:

“找不到具有名称/关键字TourneySetupTextStyle的资源”

所以我想问题是:既然ResourceDictionary已被键控,我该如何访问样式?

最佳答案

我今天才遇到这个问题-我正在交叉编译到WPF/Silverlight。
将本地资源放入ResourceDictionary节点内,不要在ResourceDictionary节点上放置x:Key。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/mydll;component/folder/MyResDict.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <LinearGradientBrush x:Key="OrangeGradient"
                             EndPoint="0.5,1"
                             MappingMode="RelativeToBoundingBox"
                             StartPoint="0.5,0">
            <LinearGradientBrush.RelativeTransform>
                <RotateTransform  CenterY="0.5"
                                  CenterX="0.5" />
            </LinearGradientBrush.RelativeTransform>
            <GradientStop Color="#FFF3801E" />
            <GradientStop Color="#FFEDB17E"
                          Offset="0.5" />
            <GradientStop Color="#FFF3801E"
                          Offset="1" />
        </LinearGradientBrush>
    </ResourceDictionary>
</UserControl.Resources>

我无法解释原因-但我知道它有效...

hth

关于silverlight - 如何在SL4页面中使用键定义资源和MergeDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818000/

相关文章:

wpf - 我可以将 DataGrid 的 CellTemplate 定义为 Resource 以便它可以在多个列中重复使用吗?

wcf - 如何为新的Silverlight应用程序在WCF,REST,POX和RIA服务之间进行选择

c# - 为什么 System dll 在 Silverlight 和其他 C# 库中不同是有原因的

c# - Silverlight:为图像添加透明度

mvvm - Silverlight 4,MEF,导出/导入错误,Mefx 不想工作

wpf - 为什么我的 WPF GroupBox 看起来很奇怪?

silverlight - 如何使用 Silverlight 在 Windows 和 MAC 上安装字体?

wpf - 适用于WPF用户的Silverlight(4.0)

css - TYPO3 在文本内容 View 中向 UL 后端添加样式类

Javascript,使用 if 语句更改单击元素的颜色