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被键控的情况下访问样式?
我今天碰到了这个 - 我正在编译到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)
我无法解释原因 - 但我知道它有效......
心连心
叹息看来声明的顺序很重要,一旦我将第一个资源向下移动,它现在就可以工作了:
<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)
如果有人能解释为什么这对于将来的参考会很有帮助......