视觉工作室的xaml设计师共享资源

时间:2012-06-21 13:10:13

标签: visual-studio xaml shared resourcedictionary xaml-designer

如果您尝试将任何共享资源与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中是否修复了此错误?

1 个答案:

答案 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>