According to MSDN,Silverlight静态资源查找机制应该:
StaticResource的查找行为以应用实际用法的对象及其自己的Resources属性开始。 (...)然后查找序列检查下一个对象树父级。 (...)否则,查找行为将前进到对象树根的下一个父级别,依此类推。
这非常简单,因为它缩小到简单地遍历对象图,直到找到所请求的资源密钥。有人可能会认为,这会起作用:
<UserControl x:Class="ResourcesExample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ResourcesExample="clr-namespace:ResourcesExample"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<SolidColorBrush Color="Green" x:Key="GreenBrush"/>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<ResourcesExample:Tester />
</Grid>
</UserControl>
<UserControl x:Class="ResourcesExample.Tester"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot">
<TextBlock Text="Show green!" Foreground="{StaticResource GreenBrush}"/>
</Grid>
</UserControl>
嗯,它没有。我得到的是XamlParseException : Cannot find a Resource with the Name/Key GreenBrush
。
我在这里遗漏了一些明显或文档不正确的内容吗?
答案 0 :(得分:1)
那是因为在母UserControl中插入子UserControl之前,它必须完全实例化,因为它还不知道它的父,它不知道SolidColorBrush。
如果您将SolidColorBrush放在Appl.xaml的参考资料部分中,它将起作用:App.xaml在应用程序启动时加载,您放入的任何资源都将全局可用。
也就是说,您还可以在子UserControl中公开InnerTextForeground依赖项属性,并将其设置为父UserControl中的本地SolidColorBrush资源。 这不是很困难,但如果你有麻烦,请告诉我。