質問

リソースキーを指定せずに、コードからResourceDictionaryにリソースを追加する方法はありますか?

たとえば、XAMLにこのリソースがあります:

<TreeView.Resources>
    <HierarchicalDataTemplate DataType="{x:Type xbap:FieldPropertyInfo}"
        ItemsSource="{Binding Path=Value.Values}">
            <TextBlock Text="{Binding Path=Name}" />
    <HierarchicalDataTemplate>
</TreeView.Resources>

このリソースをコードから動的に作成し、TreeView ResourceDictionaryに追加する必要があります。ただし、キーを持たないXAMLでは、デフォルトですべてのFieldPropertyInfoタイプに使用されます。キーを持たずにコードでリソースに追加する方法はありますか、キーを使用してもすべてのFieldPropertyInfoタイプで使用できる方法はありますか?

これまでにC#で行ったことは次のとおりです。

HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.ItemsSource = new Binding("Value.Values");

this.Resources.Add(null, fieldPropertyTemplate);

明らかに、ResourceDictionaryにリソースを追加してもキーnullは機能しません。

役に立ちましたか?

解決

テンプレートをキーとして適用するタイプを使用します。

HierarchicalDataTemplate fieldPropertyTemplate = new 
    HierarchicalDataTemplate("FieldProperyInfo");

fieldPropertyTemplate.SetBinding(
   HierarchialDataTemplate.ItemSourceProperty, 
   new Binding("Value.Values");
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

コードが機能しなかった理由は、実際にバインディングを設定していないためです。バインディングをバインドしたいプロパティでSetBindingを呼び出す必要があります。

他のヒント

テンプレートをキーとして適用するタイプを使用します。

this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);

上記のテンプレートと同様に、タイプを指定します。名前またはタイプを指定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top