我知道有很多这样的问题。但是这些解决方案中的大多数都不适用于我的情况。然而,在花了一天的时间之后,我终于找到了一个适用于我的解决方案。我只需要一个对 XAML 有更深入了解的人向我解释,可能还有其他人解释这里到底发生了什么。
<Style x:Key="ListBoxItemStyleNoHighlighting" TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<ContentPresenter x:Name="contentPresenter"
Margin="{TemplateBinding Margin}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如果有人需要如何使用它的xaml,这里是
<ListBox Background="Transparent"
BorderThickness="0"
ItemTemplate="{StaticResource MyDataTemplate}"
ItemsSource="{Binding MenuSubItems}"
SelectedItem="{Binding MySelectedItem}"
ItemContainerStyle="{StaticResource ListBoxItemStyleNoHighlighting}">
那么这种风格发生了什么?我以前从未见过这样的事情。经过一些研究,我发现TemplateBinding只是为父级设置其值。那么,如果它不向样式添加任何内容,为什么甚至需要该内容演示器。值得一提的是,如果没有ContentPresenter,它根本不起作用。
亲切问候丹尼尔
ContentPresenter 的概念非常简单 – 它是任何 XAML 内容的占位符,可用于在运行时插入内容。
这里还有更多。