如何从.net类访问UserControl资源?



我正试图从我的TreeViewGroupItemTemplateSelector类访问UserControl中的资源。我不能访问TreeViewGroupItemTemplateSelector类中的UserControl类。我有问题格式化Uri

PackageExplorer.xamlUserControl,位于本地程序集的根命名空间中,该程序集也包含TreeViewGroupItemTemplateSelector类。

我得到以下错误:

无法找到资源'resources/packageexplorer.xaml'

在Uri实例化期间。

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);

不清楚你想要实现什么-但据我所知…

如果您试图加载整个用户控制XAML文件-作为资源

用户控件XAML不是一个"资源字典"——我不确定这会产生什么错误。

但是只是把分开。你可以使用MergeDictionary将任何外部的"资源字典"XAML合并到UserControl中。

最新更新