0
专家,WPF - 引用多个资源
在XAML我想创建实体之间的许多一对多的关系。
基本上我想多个“经理”对象能够管理多个“项目”。下面的XAML应说明我在寻找:
<Grid>
<Grid.Resources>
<cc:Manager x:Key="Manager1"/>
<cc:Manager x:Key="Manager2"/>
</Grid.Resources>
<cc:Item>
<cc.Manager.ManagedBy>
<StaticResource ResourceKey="Manager1" />
</cc.Manager.ManagedBy>
</cc:Item>
<cc:Item>
<cc.Manager.ManagedBy>
<StaticResource ResourceKey="Manager1" />
<StaticResource ResourceKey="Manager2" /> <!-- ERROR HERE -->
</cc.Manager.ManagedBy>
</cc:Item>
<cc:Item>
<cc.Manager.ManagedBy>
<StaticResource ResourceKey="Manager2" />
</cc.Manager.ManagedBy>
</cc:Item>
</Grid>
的附加属性(Manager.ManagedBy)是ManagedByCollection
类型的...
ManagedByCollection : List<ManageBy>
有了这个,我得到以下错误信息:
The object 'Object' already has a child and cannot add 'StaticResourceExtension'. 'Object' can accept only one child. Line NN Position NN.
所以,我wen't回到MSDN和实现有一个ContentPropertyAttribute告诉XAML编译器指定没有别的什么时,属性是默认的。在一个LinearGradientBrush,例如,使用该属性,使我们能够只写...
<LinearGradientBrush ... >
<GradientStop ... />
<GradientStop ... />
<GradientStop ... />
</LinearGradientBrush>
...而不是...
<LinearGradientBrush ... >
<GradientStopCollection>
<GradientStop ... />
<GradientStop ... />
<GradientStop ... />
</GradientStopCollection>
</LinearGradientBrush>
所以,我想我只需要指定的ManagedByCollection
作为类ContentProperty索引:
[ContentProperty("Item")
ManagerCollection : List<Manager>
不幸的是,这并没有解决问题。目前,下列作品...
<cc.Manager.ManagedBy>
<ManagerCollection>
<StaticResource ResourceKey="Manager1" />
<StaticResource ResourceKey="Manager2" />
<cc:ManagerCollection>
</cc.Manager.ManagedBy>
...但同样,我宁愿多readble语法:
<cc.Manager.ManagedBy>
<StaticResource ResourceKey="Manager1" />
<StaticResource ResourceKey="Manager2" />
</cc.Manager.ManagedBy>
任何帮助或提示,将不胜感激。
是的,但在这种情况下,我想弄清楚如何从藏品参考其他XAML实体,而无需显式地创建一个集合,就像使用'LinearGradientBrush'和'GradientStop'项目一样。 –
@JonasRembratt,他们以同样的方式工作; LinearGradientBrush初始化其GradientStops集合,以便可以在XAML中直接添加项目 –
不知道我理解。我意识到我的情况与我的情况有所不同,因为我正在使用_attached_属性,而GradientStops属于正常属性。我尝试将附加属性的默认值设置为正确的集合,但仍然出现此运行时错误: ''Spike.ManyToManyXAML.Manager'对于'ManagedBy'属性不是有效值。' –