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'屬性不是有效值。' –