1

如果您尝试将任何共享资源与 x:Shared="false" 一起使用,Visual Studio 2010 的 xaml 设计器会向您显示以下异常:

System.InvalidOperationException 指定元素已经是另一个元素的逻辑子元素。先断开它。

是否有可能解决它(例如,通过实现一个附加属性来创建相同的共享对象)?

示例 xml:

<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 中修复了吗?

4

1 回答 1

0

不幸的是,这不被视为错误。除非 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>
于 2014-01-08T14:35:36.837 回答