这可能是一个非常愚蠢的问题,但我无法弄清楚。
我有一个定义了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/