起因:
<Window x:Class="WpfApplication1.Window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window3" Height="300" Width="300"> <Window.Resources> <Button Background="Blue" Margin="5" Height="28" x:Key="prev"> <Image Height="21" Source="Images\previous.gif"></Image> </Button> </Window.Resources> <Grid> <Button Height="20" Width="70" Content="Content" /> <StaticResource ResourceKey="prev" /> </Grid> <!--第二次--> <Grid> <Button Height="20" Width="70" Content="Content" /> <StaticResource ResourceKey="prev" /> </Grid> </Window>
報錯:
指定的元素已經是另一個元素的邏輯子元素。請先將其斷開連接
原因:當實例化的UserControl作為多個父類控件的Content內容時,如果不清除他與前一個父控件的關系,則會報此類錯誤。
解決方案:
在資源里面添加 x:Shared="False" 就可以了。
X:Shared用於指定請求資源時創建實例的兩種方式。
X:Shared = “true”(默認):表示所有請求都是共享同一個實例。一般不顯示指定。
X:Shared = “false”:表示每次請求都創建一個新的實例。
即:
<Window.Resources> <Button Background="Blue" X:Shared = “false” Margin="5" Height="28" x:Key="prev"> <Image Height="21" Source="Images\previous.gif"></Image> </Button> </Window.Resources>
總結思路來源 http://bbs.csdn.net/topics/370036271
http://www.cnblogs.com/zlgcool/archive/2008/10/18/1314281.html