我已经注意到ListBoxItem发生了一件奇怪的事情,即使您实际上对创建的ListBoxItem不做任何操作,如果它的内容不为null,也会导致2个绑定错误。请注意,我没有创建任何绑定,并且已经发布了重现这些错误所需的所有代码。

ListBoxItem li = new ListBoxItem();


要么

ListBox lb = new ListBox();
ListBoxItem li = new ListBoxItem();
li.Content = "Something";
lb.Items.Add(li);


不会造成任何错误,但是

ListBoxItem li = new ListBoxItem();
li.Content = "Something";


结果:


  System.Windows.Data错误:4:找不到参考'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel ='1''的绑定源。 BindingExpression:Path = Horizo​​ntalContentAlignment; DataItem = null;目标元素是'ListBoxItem'(Name ='');目标属性为“ Horizo​​ntalContentAlignment”(类型为“ Horizo​​ntalAlignment”)
  
  System.Windows.Data错误:4:找不到参考'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel ='1''的绑定源。 BindingExpression:Path = VerticalContentAlignment; DataItem = null;目标元素是'ListBoxItem'(Name ='');目标属性为“ VerticalContentAlignment”(类型为“ VerticalAlignment”)


谁能说出导致这种现象的原因吗?

最佳答案

这是因为ListBoxItem的默认样式包含带有BindingRelativeSource,以获得Horizontal/Vertical的对齐方式所包含的ContentAlignmentItemsControl ListBoxItem

像这样:

<Style TargetType="ListBoxItem">
    <Setter Property="HorizontalAlignment" Value="{Binding HorizontalContentAlignment RelativeSource={RelativeSource AncestorType=ItemsControl}}"/>
</Style>


您正在创建的ListBoxItem不在ItemsControl中,因此RelativeSource Binding找不到该类型的祖先。

关于c# - 如果内容不为空,则未使用的ListBoxItem导致绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31728984/

10-12 02:27