Я пытаюсь получить доступ к ресурсу в 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);
Пит, попробуйте положить ресурсы вне пользовательского элемента управления (вместо этого, вместо того чтобы объединить его в пользовательский элемент или увидеть его глобально), а затем попробуйте загрузить этот словарь ресурсов вместо пользовательского элемента управления. – NSGaga
@NSGaga, приведенный выше комментарий немного запутан. 1) Мне не нужен этот ресурс, за исключением этого элемента управления и TemplateClass (используется внутри элемента управления). Зачем мне это перемещать? 2) Вы рекомендовали переместить его за пределы пользовательского элемента управления и вместо этого объединить его в пользовательский контроль? –
yes Pete - непонятно, чего вы пытаетесь достичь - как я понимаю, вы пытаетесь загрузить весь файл XAML для управления пользователями - как ресурс, не так ли? Пользовательский элемент управления XAML не является «ресурсным словарем» - я не уверен, какую ошибку он произведет. Но, конечно, просто отдельные вещи. Вы можете использовать 'MergeDictionary' для объединения любого внешнего« ресурсного словаря »XAML в' UserControl.Resources', но сохраните этот «ресурс» как собственный файл, который, а не весь пользовательский элемент управления, надеется, что теперь это имеет смысл. – NSGaga