2010-05-26 2 views
0

Учитывая, что ресурсный словарь загружает некоторые статические ресурсы в память - есть ли способ итерации через загруженные в память ресурсы? Приложение silverlight продолжает сообщать мне, что не может найти статический ресурс. Интересно, если у меня есть вопрос именования конвенции или somehting - надеется переборе ресурсов в памяти поможет диагностировать любую проблему ...Итерация через StaticResource, загружаемая ResourceDictionary

У меня есть следующие 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

ресурсы, определенные в 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} /> 
+0

хммм. добавление словаря в UserControl.Resources - кажется, заставляет все работать ... Почему вы думаете, что это будет? Когда ссылка была в app.xaml, я смог получить ссылку на элемент через: let i2: ControlTemplate = downcast Application.Current.Resources.MergedDictionaries. [0]. ["TransitioningFrame"] Какой показывает, что он загружен - но приложение все еще бросает исключение – akaphenom

+0

Не уверен, возможно, какая-то циклическая зависимость бросает гаечный ключ в работу? Может быть, вы можете проверить, есть ли у вашего компонента проблемы, поставив простой ресурс, например Brush, в объединенный словарь и посмотреть, доступно ли это в элементе управления? –

+0

absolutley Я могу обмануть его. Но я думаю, что этого достаточно, и я могу передать его инженеру, чтобы перекачать какие-то фиктивные таблицы и т. Д. На место для демонстрации. Наличие этого приложения в 100% f # было нелегким, но спасибо за то, что помогли мне уловить одну из последних «функциональных» неизвестных. – akaphenom

Смежные вопросы