Поиск статических ресурсов - PullRequest
0 голосов
/ 02 декабря 2011

Согласно MSDN , механизм поиска статических ресурсов Silverlight должен:

Поведение поиска для StaticResource начинается с объекта, к которому применяется фактическое использование, и его собственных ресурсов.имущество.(...) Затем последовательность поиска проверяет следующий родительский объект дерева.(...) В противном случае поведение поиска переходит на следующий родительский уровень к корню дерева объектов и т. Д.

Это довольно просто, поскольку оно сужается до простого обхода графа объектов до тех пор, пока не будет запрошеноКлюч ресурса найден.Можно предположить, что это будет работать:

<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 Ответ

1 голос
/ 02 декабря 2011

Это потому, что перед тем, как вставить дочерний UserControl в материнский UserControl, его необходимо полностью создать, а поскольку он еще не знает своего родителя, он не знает о SolidColorBrush.

ЕслиВы помещаете SolidColorBrush в раздел Ресурсы вашего Appl.xaml, он будет работать: App.xaml загружается при запуске приложения, и любой добавленный вами ресурс будет глобально доступен.

Тем не менее, вы также можете выставитьСвойство зависимости InnerTextForeground в дочернем UserControl и установите его в качестве локального ресурса SolidColorBrush в родительском UserControl.
Это не очень сложно, но дайте мне знать, если у вас возникли проблемы с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...