0

UserControlクラスのリソースにアクセスしようとしていますTreeViewGroupItemTemplateSelectorUserControlクラス内のクラスにアクセスできませんTreeViewGroupItemTemplateSelector。のフォーマットに問題がありUriます。

PackageExplorer.xamlであり、クラスUserControlも含むローカル アセンブリのルート名前空間に存在します。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);
4

1 に答える 1

0

あなたが何を達成しようとしているのかは明確ではありませんが、私が理解しているように...

ユーザー制御XAMLファイル全体をリソースとしてロードしようとしている場合

ユーザーコントロールXAMLは「リソースディクショナリ」ではありません-どのようなエラーが発生するかはわかりません。

しかし、物事を分けるだけです。MergeDictionaryを使用して、外部の「リソースディクショナリ」XAMLをUserControl.Resourcesにマージできますが、その「リソース」をファイルとして保持します。ユーザーコントロール全体ではなく、それが役立つことを期待してロードします。

于 2013-03-21T11:36:15.990 に答える