Style里创建的UI元素都是共享的

前提是当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>

类似这篇文章里提到的现象。解决方案是用x困惑hared = 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>

发表回复