我已经注意到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 = HorizontalContentAlignment; DataItem = null;目标元素是'ListBoxItem'(Name ='');目标属性为“ HorizontalContentAlignment”(类型为“ HorizontalAlignment”)
System.Windows.Data错误:4:找不到参考'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.ItemsControl',AncestorLevel ='1''的绑定源。 BindingExpression:Path = VerticalContentAlignment; DataItem = null;目标元素是'ListBoxItem'(Name ='');目标属性为“ VerticalContentAlignment”(类型为“ VerticalAlignment”)
谁能说出导致这种现象的原因吗?
最佳答案
这是因为ListBoxItem
的默认样式包含带有Binding
的RelativeSource
,以获得Horizontal/Vertical
的对齐方式所包含的ContentAlignment
的ItemsControl
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/