キーなしのコードからXAMLリソースを作成する
-
02-07-2019 - |
質問
リソースキーを指定せずに、コードから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);
上記のテンプレートと同様に、タイプを指定します。名前またはタイプを指定する必要があります。
所属していません StackOverflow