Итерация по StaticResource, загруженному ResourceDictionary - PullRequest
0 голосов
/ 26 мая 2010

Учитывая словарь ресурсов, загружающий некоторые статические ресурсы в память - есть ли способ перебирать ресурсы, загруженные в память? Мое приложение silverlight постоянно сообщает мне, что не может найти статический ресурс. Интересно, есть ли у меня проблема с соглашением об именах или что-то в этом роде - я надеялся, что перебор ресурсов в памяти поможет диагностировать любую проблему ...

У меня есть следующий app.xaml

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             x:Class="Module1.MyApp">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrame.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

и шаблон контента:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"  
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ControlTemplate x:Key="TransitioningFrame" TargetType="navigation:Frame">
        <Border Background="{TemplateBinding Background}"
                BorderBrush="{TemplateBinding BorderBrush}"
                BorderThickness="{TemplateBinding BorderThickness}"
                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
            <ContentPresenter Cursor="{TemplateBinding Cursor}"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          Margin="{TemplateBinding Padding}"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                          Content="{TemplateBinding Content}"/>
        </Border>
    </ControlTemplate>
</ResourceDictionary>

1 Ответ

1 голос
/ 26 мая 2010

Ресурсы, определенные в Application.Resources, неявно доступны для всех элементов управления в приложении, но не уверены в том, что словари объединены.Вы можете установить точку останова в конструкторе элемента управления и проверить this.Resources, this.Resources.MergedDictionaries, Application.Resources и Application.Resources.MergedDictionaries, чтобы увидеть, есть ли там ваш ресурс.

Также попробуйте добавить объединенные словари в свой элемент управления.Посмотрите, имеет ли это какое-то значение:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/FSSilverlightApp;component/TransitioningFrame.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

<!--Use the style later in the same file-->
<navigation:Frame Style={StaticResource TransitioningFrame} />
...