从没有密钥的代码创建XAML资源
时间:2020-03-06 14:47:51 来源:igfitidea点击:
有没有一种方法可以通过代码将资源添加到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中,没有Key意味着默认情况下,所有FieldPropertyInfo类型都使用它。有没有一种方法可以在没有密钥的情况下将其添加到代码中,或者有没有办法我可以使用密钥并且仍然在所有FieldPropertyInfo类型上使用它?
到目前为止,这是我在C中所做的事情:
HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); fieldPropertyTemplate.ItemsSource = new Binding("Value.Values"); this.Resources.Add(null, fieldPropertyTemplate);
显然,将资源添加到ResourceDictionary时,键null无效。
解决方案
使用我们希望模板应用于的类型作为键:
this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);
与上面的模板一样,我们提供一种类型。我们必须提供名称或者类型。
使用我们希望模板应用于的类型作为键:
HierarchicalDataTemplate fieldPropertyTemplate = new HierarchicalDataTemplate("FieldProperyInfo"); fieldPropertyTemplate.SetBinding( HierarchialDataTemplate.ItemSourceProperty, new Binding("Value.Values"); this.Resources.Add(FieldPropertyInfo.GetType(), fieldPropertyTemplate);
代码无法正常工作的原因是我们实际上没有设置绑定。我们需要使用要绑定绑定到的属性来调用SetBinding。