C# ListBoxItem上的ContentAlignment错误。未应用样式设置器
我发现以下数据绑定错误:C# ListBoxItem上的ContentAlignment错误。未应用样式设置器,c#,wpf,data-binding,C#,Wpf,Data Binding,我发现以下数据绑定错误: System.Windows.Data错误:4:找不到引用为“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1'的绑定源。BindingExpression:Path=HorizontalContentAlignment;DataItem=null;目标元素是“ListBoxItem”(名称=“”);目标属性为“Horizont
System.Windows.Data错误:4:找不到引用为“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.ItemsControl',AncestorLevel='1'的绑定源。BindingExpression:Path=HorizontalContentAlignment;DataItem=null;目标元素是“ListBoxItem”(名称=“”);目标属性为“HorizontalContentAlignment”(类型为“HorizontalAlignment”)
即使我的ListBox.ItemContainerStyle指定了不同的值
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="VerticalContentAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="FocusVisualStyle" Value="{StaticResource EmptyFocusVisualStyle}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<ContentPresenter x:Name="Content" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
但是,如果我使用Snoop检查该项,则该项不会显示数据绑定错误。尽管Snoop显示了有效的数据绑定,即使我将该值设置为常量而不是绑定?!
其他二传手的工作方式与预期一致
在更高级别设置样式不会解决此错误。
有人能帮我吗
编辑:我在这里读过很多类似的问题,但是那里的答案并没有解决我的问题
编辑2:
我知道错误指向包含绑定的ListBoxItem的默认模板。我知道这是一个常见的问题,但在大多数线程中,我读到的解决方案是在App.xaml/resources/ItemContainerStyle中设置样式。我的问题是,所有的方法都没有解决我的问题
别误会我,我只是不想说清楚。禁止或忽略此错误不是一个选项。在大型应用程序中,绑定将变得不可维护
编辑3:
经过进一步调查,我发现只有在我将项目添加到StartUpUri窗口的构造函数中的列表框中(在InitializeComponent之后),如果我在此之后添加项目(事件、其他表单或调度),才会发生这种情况不再存在数据绑定问题。这是一个常见错误,发生在
ListBoxItem
和MenuItem
类的默认ControlTemplate
中,与您的代码无关。它尝试查找最近的项控件
祖先,并绑定到垂直内容对齐
和水平内容对齐
属性,但由于代码中没有任何属性,因此会出现此警告
异常是在内部处理的,因此您可以忽略这些警告。有许多所谓的修复方法在不同程度上起作用。一个这样的示例就是以样式设置这些属性,但当我遇到此问题时,此修复没有帮助(我可以看到您也尝试了此方法):
不管怎样,它们只是警告,对应用程序没有负面影响,所以你可以忽略它们(尽管它们很烦人)。如果你将错误信息放入搜索引擎(你必须删除标点符号),那么你会发现更多关于这个主题的帖子。问题出在别处,输出窗口提到的与相对资源
的绑定
在哪里?问题出在包含TemplateBinding的ListBoxItem的默认模板中。我应该澄清ofc将编辑我的帖子。我应该提到我知道默认的模板实现。但问题是,即使我在App.xaml中声明了一个样式,我仍然会得到上面的绑定错误,而对于大多数ppl来说,这似乎可以解决它。更奇怪的是,snoop在我的可视化树中显示了VerticalContentAlignment的有效数据绑定。ListBoxItem位于可视化树中的一个ListBox下,它应该让TemplateBinding找到它正在搜索的ItemsControl。是的,这会节省我一些时间。无论哪种方式,我的一个应用程序在一个特定视图中都存在相同的问题。起初,我觉得这也很烦人,并尝试了一些方法来删除警告。它们对我也不起作用,但在了解了这些警告的原因以及它们对应用程序没有负面影响之后,我决定忽略它们。我只在处理这个视图时看到它们,而且它已经完全实现了,我不需要再处理它了。。。眼不见,心不烦。
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Stretch" />
</Style>