我可以把一个XAMLStyle
为ListBoxItem
中<ListBox.Resources>
或<ListBox.ItemContainerStyle>
。参见代码。
问题是:有什么区别,我应该选择什么?
<ListBox.Resources>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ListBox.Resources>
要么:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
</Style>
</ListBox.ItemContainerStyle>
我接受了一个答案,但是发现并想到了这种奇怪的症状:
两种方法都给我这种奇怪的数据绑定警告:找不到引用为'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel的绑定源='1''。BindingExpression:Path = HorizontalContentAlignment; DataItem = null ....等。
这是一个绑定,隐藏在系统Aero样式的某个位置,不是我的。
只有当我同时使用两种样式时,此警告才会消失!
ItemContainerStyle
这样做是正确的方法,因为它是显式设置的,因此wpf不必总是查找样式可能在的位置。它更快更好。这就是为什么存在该财产的原因。
如果ItemContainerStyle
未设置,则WPF将在ListBox.Resources
或Window.Resources
或中寻找样式Application.Resources
。这对性能不利。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句