2013-03-21 3 views
0

Я пытаюсь получить доступ к ресурсу в UserControl из моего класса TreeViewGroupItemTemplateSelector. У меня нет доступа к классу UserControl в классе TreeViewGroupItemTemplateSelector. У меня проблемы с форматированием Uri.Как получить доступ к ресурсу UserControl из класса .net

PackageExplorer.xaml является UserControl и находится в корневом пространстве имен локальной сборки, который также содержит класс TreeViewGroupItemTemplateSelector.

Я получаю следующее сообщение об ошибке:

Cannot locate resource 'resources/packageexplorer.xaml'

Во инстанциации Ури.

public class TreeViewGroupItemTemplateSelector : DataTemplateSelector 
{ 
     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 
      var configGroup = item as IConfigurationGroup; 
      if (configGroup == null) 
       return null; 
      var resourceDictionary = new ResourceDictionary(); 
      resourceDictionary.Source = new Uri 
       ("/myAssembly;component/Resources/myUserControl.xaml", 
       UriKind.RelativeOrAbsolute); 

      if (configGroup.ItemType == typeof (ReferencePackageConfigurationItem)) 
       return resourceDictionary["RefreshableHierarchicalDataTemplate"] as DataTemplate; 
      else 
       return resourceDictionary["DefaultHierarchicalDataTemplate"] as DataTemplate; 

     } 
    } 
} 

Часть XAML (фрагмент) выглядит следующим образом:

<UserControl.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary> 
     <HierarchicalDataTemplate x:Key="DefaultHierarchicalDataTemplate" 
      DataType="{x:Type localconfig:ConfigurationGroup}" 
      ItemsSource="{Binding Path=Items}" 
      ItemTemplateSelector="{StaticResource TreeViewGroupItemTemplateSelector}"/> 
     <HierarchicalDataTemplate x:Key="RefreshableHierarchicalDataTemplate" 
      DataType="{x:Type localconfig:ConfigurationGroup}" 
      ItemsSource="{Binding Path=Items}" 
      ItemTemplateSelector="{StaticResource TreeViewGroupItemTemplateSelector}"/> 

Я также попытался получить доступ к ресурсу, как показано ниже, с теми же результатами:

resourceDictionary.Source = new 
     Uri("/Resources/myUserControl.xaml", UriKind.RelativeOrAbsolute); 

и:

resourceDictionary.Source = new 
    Uri("myUserControl.xaml", UriKind.RelativeOrAbsolute); 
+0

Пит, попробуйте положить ресурсы вне пользовательского элемента управления (вместо этого, вместо того чтобы объединить его в пользовательский элемент или увидеть его глобально), а затем попробуйте загрузить этот словарь ресурсов вместо пользовательского элемента управления. – NSGaga

+0

@NSGaga, приведенный выше комментарий немного запутан. 1) Мне не нужен этот ресурс, за исключением этого элемента управления и TemplateClass (используется внутри элемента управления). Зачем мне это перемещать? 2) Вы рекомендовали переместить его за пределы пользовательского элемента управления и вместо этого объединить его в пользовательский контроль? –

+2

yes Pete - непонятно, чего вы пытаетесь достичь - как я понимаю, вы пытаетесь загрузить весь файл XAML для управления пользователями - как ресурс, не так ли? Пользовательский элемент управления XAML не является «ресурсным словарем» - я не уверен, какую ошибку он произведет. Но, конечно, просто отдельные вещи. Вы можете использовать 'MergeDictionary' для объединения любого внешнего« ресурсного словаря »XAML в' UserControl.Resources', но сохраните этот «ресурс» как собственный файл, который, а не весь пользовательский элемент управления, надеется, что теперь это имеет смысл. – NSGaga

ответ

0

Непонятно, что вы пытаетесь нг достичь - но, как я понимаю ...

If you're trying to load the entire user-control XAML file - as a resource

User control XAML is not a 'resource dictionary' - I'm not sure as to what error that might produce.

Но только отдельные вещи. Вы можете использовать MergeDictionary для слияния любого внешнего «ресурсного словаря» XAML в UserControl.Resources - но сохраните этот «ресурс» как собственный файл, который, а не весь пользовательский элемент управления, надеется, что поможет

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