静态资源查找

时间:2011-12-02 11:08:17

标签: c# silverlight resources

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

我在这里遗漏了一些明显或文档不正确的内容吗?

1 个答案:

答案 0 :(得分:1)

那是因为在母UserControl中插入子UserControl之前,它必须完全实例化,因为它还不知道它的父,它不知道SolidColorBrush。

如果您将SolidColorBrush放在Appl.xaml的参考资料部分中,它将起作用:App.xaml在应用程序启动时加载,您放入的任何资源都将全局可用。

也就是说,您还可以在子UserControl中公开InnerTextForeground依赖项属性,并将其设置为父UserControl中的本地SolidColorBrush资源。 这不是很困难,但如果你有麻烦,请告诉我。