如何使用SL4页面中的键定义资源和MergeDictionary

Rod*_*ney 9 silverlight styles silverlight-4.0

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

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

  <navigation:Page.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </navigation:Page.Resources>
Run Code Online (Sandbox Code Playgroud)

我在我的XAML中引用了TourneySetupStyles.xaml中的样式,没有问题:

<TextBlock Text="Tourney Name:" Style="{StaticResource TourneySetupTextStyle}" />
Run Code Online (Sandbox Code Playgroud)

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

但是设计师现在发出一个警告:"设计师不支持加载混合了'ResourceDictionary'项目的字典而没有同一个集合中的密钥和其他项目.请确保'Resources'属性不包含'ResourceDictionary'项目而没有key,或者'ResourceDictionary'项是集合中唯一的元素."

所以我在我的ResourceDictionary中添加了一个键,如下所示:

   <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>
Run Code Online (Sandbox Code Playgroud)

并且警告消失了.但是现在我对TourneySetupStyles中的样式的引用不再有效:

"找不到名称/键TourneySetupTextStyle的资源"

所以我想问题是:现在如何在ResourceDictionary被键控的情况下访问样式?

cha*_*dbr 8

我今天碰到了这个 - 我正在编译到WPF/Silverlight.将本地资源放在ResourceDictionary节点内,不要在ResourceDictionary节点上放置ax: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>
Run Code Online (Sandbox Code Playgroud)

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

心连心


Rod*_*ney 1

叹息看来声明的顺序很重要,一旦我将第一个资源向下移动,它现在就可以工作了:

<navigation:Page.Resources>
    <ResourceDictionary x:Key="TourneySetupStyles">
            <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    <local:Tournament x:Key="tourneySetupViewModel" />
</navigation:Page.Resources>
Run Code Online (Sandbox Code Playgroud)

如果有人能解释为什么这对于将来的参考会很有帮助......