指定的元素已经是另一个元素的逻辑子元素。首先断开它“

时间:2013-11-15 23:11:21

标签: wpf xaml

我有包含网格的用户控件,里面有扩展器问题是当我尝试打开使用此用户控件的新窗口时我得到一个异常“指定的元素已经是另一个元素的逻辑子元素。首先断开连接“
这是我的代码及其在创建第一个窗口时的工作 并且在显示第二个窗口时发生异常

 <UserControl x:Class="DiagramDesigner.WindowsUserControl"
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                     xmlns:s="clr-namespace:DiagramDesigner"
                xmlns:c="clr-namespace:DiagramDesigner.Controls"
                     mc:Ignorable="d" 

                     d:DesignHeight="700" d:DesignWidth="1000">
            <UserControl.Resources>
                <ContextMenu x:Key="DesignerCanvasContextMenu">
                    <MenuItem Header="Paste" Command="{x:Static ApplicationCommands.Paste}">
                        <MenuItem.Icon>
                            <Image Source="Resources/Images/Paste.png" Width="16"/>
                        </MenuItem.Icon>
                    </MenuItem>
                    <MenuItem Header="Select All" Command="{x:Static s:DesignerCanvas.SelectAll}"/>
                </ContextMenu>
            </UserControl.Resources>

            <Grid Margin="10">
                <Grid.RowDefinitions>

                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>


                <Grid Grid.Row="1" Margin="0,10,0,0">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="200"/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <!-- Toolbox -->
                    <StackPanel Grid.Column="0" Margin="0,0,5,0">
                        <Expander Header="Flow Chart" Content="{StaticResource FlowChartStencils}" IsExpanded="True" />
                    </StackPanel>
                    <!-- GridSplitter -->
                    <GridSplitter Focusable="False" Width="2" Background="LightGray"
                            VerticalAlignment="Stretch" HorizontalAlignment="Right"/>
                    <!-- Designer -->
                    <GroupBox Header="Diagram" Grid.Column="1" Margin="3,0,0,0">
                        <ScrollViewer HorizontalScrollBarVisibility="Auto"
                              VerticalScrollBarVisibility="Auto">
                            <s:DesignerCanvas Focusable="true" x:Name="MyDesigner"
                                    Background="{StaticResource WindowBackgroundBrush}"
                                    Margin="10" FocusVisualStyle="{x:Null}"
                                    ContextMenu="{StaticResource DesignerCanvasContextMenu}"/>
                        </ScrollViewer>
                    </GroupBox>
                </Grid>
            </Grid>
       </UserControl>

2 个答案:

答案 0 :(得分:3)

您不能为UI的不同部分重用相同的UIElement实例。从第一个中删除它并将其添加到第二个(不推荐但有一些高级方案是有意义的)或只是创建一个新的方案。它很便宜。

答案 1 :(得分:1)

我遇到了这个错误,我设法确定了使用反复试验发生的原因。

问题?我使用来自DXGrid的{​​{1}}在两个上下文菜单中使用以下XAML行作为主/详细网格。

DevExpress

一旦我解决了问题,我注意到堆栈跟踪确实给出了一个关于哪个XAML元素导致错误的小线索。堆栈跟踪中的第4行以此结束:

<dxb:BarItemLinkSeparator />

[snip]ILinksHolder.OnLinkAdded(BarItemLinkBase link) BarItemLinkBase的基类,这是我们的线索,即删除所述XAML将修复错误。

对于上下文,这里是完整的堆栈跟踪:

BarItemLinkSeparator