如何从.net类访问UserControl资源

时间:2013-03-21 00:32:27

标签: c# wpf xaml user-controls resourcedictionary

我正在尝试从我的UserControl课程中访问TreeViewGroupItemTemplateSelector中的资源。我无法访问UserControl课程中的TreeViewGroupItemTemplateSelector课程。我在格式化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);

1 个答案:

答案 0 :(得分:0)

目前还不清楚你想要达到的目标 - 但据我所知......

  

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

     

用户控制XAML不是'资源字典' - 我不确定可能产生的错误。

只是分开的事情。您可以使用MergeDictionary将任何外部“资源字典”XAML合并到UserControl.Resources中 - 但将该“资源”作为文件单独保存 - 加载,而不是整个用户控制,希望有帮助