2012-07-26 121 views
2

说我有对象:克隆的ResourceDictionary对象

<Grid x:Key"FooGrid> 
    <!--Content Here--> 
</Grid> 

我通常用类似引用它:

<ContentPresenter Content="{StaticResource ResourceKey=FooGrid}"/> 

虽然这个作品,如果我把它称为第二次,它删除第一次使用并将其移至要求的第二次使用。

很明显,我的方法调用资源的问题。如果我想要一个独特的对象实例,类似于可以创建的对象,那么更好的方法是什么?

我会使用风格,但据我所知,风格不支持定义的内容。

回答

4

可以使用x:Shared属性要做到这一点,例如:

<Grid x:Key"FooGrid" x:Shared="False"> 
    <!--Content Here--> 
</Grid> 
+0

谢谢,这完美的诀窍。 – Canin 2012-07-27 15:26:15

0

对不起,我,如果我的英语不好..

出现这种情况,因为该元素是其他元素的逻辑子。 但ContentPresenter不是ContentControl,那么他会这样做。

如果您使用ContentControl尝试相同的操作,则会出现运行时错误。

参见: http://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter.content

ATT, 艾伦

我用 “小肥羊” 答案补充 x:Shared="False" 但它毁了VisualBrush的结构,所以我加入到代码 VisualBrush vb = Application.Current.Resources["MyBrushName"] as VisualBrush; VisualBrush newVB = vb.Clone();
0

证明我的努力是正确的。 仅使用.Clone()不起作用。