前提是当Style在一个界面上被多次使用(比如MenuItem的Style,如果ItemContainerStyle来设置,使用的是同一个Style,被用到多个menuItem的情况)
就会出现:Specified element is already the logical child of another element. Disconnect it first.
如果错误被吃掉了,界面上就会出现没有被用上Style的元素。
比如
<Style x:Key="m1" TargetType="{x:Type MenuItem}"? BasedOn="{StaticResource {x:Type MenuItem}}" >
?????????? <Setter? Property="Header">
???????????????? <Setter.Value>??????????????????????? <TextBlock………>
?????????????????? </Setter.Value>
?????????? </Setter>?????? </Style>
类似这篇文章里提到的现象。解决方案是用xhared = false. 见msdn的解释。
?
<Label x:Shared="false" x:Key="l" Content="{Binding}">
????? </Label>
????? <Style x:Key="m1" TargetType="{x:Type MenuItem}"? BasedOn="{StaticResource {x:Type MenuItem}}" >
????????? <Setter? Property="Header" Value="{StaticResource l}">??????????????
????????? </Setter>
????? </Style>