3

说我有对象:

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

我通常通过以下方式引用它:

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

虽然这有效,但如果我第二次调用它,它会删除第一次使用并将其移动到请求的第二次使用。

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

我会使用样式,但据我了解,样式不支持定义的内容。

4

3 回答 3

6

You can use the x:Shared attribute to do this, e.g.:

<Grid x:Key"FooGrid" x:Shared="False"> 
   <!--Content Here--> 
</Grid> 
于 2012-07-26T22:31:41.183 回答
1

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

发生这种情况,因为该元素是其他元素的逻辑子元素。但是ContentPresenter不是一个ContentControl,那么他就这样做了。

如果你用 ContentControl 尝试同样的事情,你会得到一个运行时错误。

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

阿特,艾伦

于 2012-07-26T23:10:57.890 回答
0

我使用“一只小绵羊”的答案来添加 x:Shared="False" ,但它破坏了 VisualBrush 的结构,所以我添加到代码中 VisualBrush vb = Application.Current.Resources["MyBrushName"] as VisualBrush; VisualBrush newVB = vb.Clone(); ,它证明了我的努力。 只使用.Clone()是行不通的。

于 2017-10-24T08:36:54.163 回答