如果您尝试将任何共享资源与x:Shared =“false”一起使用,Visual Studio 2010的xaml设计器将显示以下异常:
System.InvalidOperationException 指定的元素已经是另一个元素的逻辑子元素。首先断开它。
是否可以解决它(例如通过实现创建共享对象的附加属性)?
示例xaml:
<Window.Resources>
<Image x:Key="SharedImage" x:Shared="false" Source="/Images/image.png" />
<Style x:Key="ImageButton" TargetType="{x:Type Button}">
<Setter Property="Content" Value="{StaticResource SharedImage}" />
</Style>
</Window.Resources>
<StackPanel>
<Button Style="{StaticResource ImageButton}" />
<Button Style="{StaticResource ImageButton}" />
</StackPanel>
Visual Studio 2012中是否修复了此错误?
答案 0 :(得分:0)
This isn't considered a bug, unfortunately.除非Microsoft改变主意,否则请将您想要的内容包装在ControlTemplate
中。
你的例子看起来像这样(未经测试):
<Window.Resources>
<ControlTemplate x:Key="ImageButton">
<Image Source="/Images/image.png" />
</ControlTemplate>
<Style TargetType="Button">
<Setter Property="Content">
<Setter.Value>
<Control Template="{StaticResource ImageButton}"/>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<Button />
<Button />
</StackPanel>