为什么在 XAML 本身内声明的 ListBoxItems 不受 DataTemplate 的影响?当我绑定(bind)一个源时,模板很好,这就是我最终要做的,但只是想知道为什么声明的项目没有样式。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding}" Foreground="Red"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBoxItem>LBI 1</ListBoxItem>
<ListBoxItem>LBI 2</ListBoxItem>
</ListBox>
这里的 LBI 1 和 LBI 2 不是红色,但如果我使用 ListBox.ItemSource 并绑定(bind)一个列表,项目是红色的。
最佳答案
“当您在 ItemsControl 上设置 ItemTemplate 时,生成的 UI 如下(以 ListBox 为例):
在内容生成期间,ItemsPanel 发起请求,要求 ItemContainerGenerator 为每个数据项创建一个容器。对于 ListBox,容器是一个 ListBoxItem。生成器回调 ItemsControl 以准备容器。
部分准备工作涉及将 ListBox 的 ItemTemplate 复制为 ListBoxItem 的 ContentTemplate。
与所有 ContentControl 类型类似,ListBoxItem 的 ControlTemplate 包含一个 ContentPresenter。应用模板时,它会创建一个 ContentPresenter,其 ContentTemplate 绑定(bind)到 ListBoxItem 的 ContentTemplate。
最后,ContentPresenter 将该 ContentTemplate 应用于自身,并创建 UI。”
如你所见above ,数据模板仅用于新生成的项目。此外,数据模板通常用于描述/呈现 "the visual structure"数据 - 你的 ListBoxItems 已经被描述为 ListBoxItems,所以他们使用那个模板......希望这是有道理的......
关于c# - 为什么在 XAML 中添加的 ListBoxItems 没有样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163329/