c# - 为什么在 XAML 中添加的 ListBoxItems 没有样式?

标签 c# silverlight xaml listbox datatemplate

为什么在 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 为例):

  1. 在内容生成期间,ItemsPanel 发起请求,要求 ItemContainerGenerator 为每个数据项创建一个容器。对于 ListBox,容器是一个 ListBoxItem。生成器回调 ItemsControl 以准备容器。

  2. 部分准备工作涉及将 ListBox 的 ItemTemplate 复制为 ListBoxItem 的 ContentTemplate。

  3. 与所有 ContentControl 类型类似,ListBoxItem 的 ControlTemplate 包含一个 ContentPresenter。应用模板时,它会创建一个 ContentPresenter,其 ContentTemplate 绑定(bind)到 ListBoxItem 的 ContentTemplate。

  4. 最后,ContentPresenter 将该 ContentTemplate 应用于自身,并创建 UI。”

如你所见above ,数据模板仅用于新生成的项目。此外,数据模板通常用于描述/呈现 "the visual structure"数据 - 你的 ListBoxItems 已经被描述为 ListBoxItems,所以他们使用那个模板......希望这是有道理的......

关于c# - 为什么在 XAML 中添加的 ListBoxItems 没有样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163329/

相关文章:

silverlight - 在 XAML 中按下 "ENTER"键时调用命令

c# - 在 Entity Framework 支持的 Web API 2 POST 调用中返回一个对象以及 409 冲突错误?

c# - 在 FluentAssertions 中自定义失败处理

c# - 创建、刷新 WPF TreeView 并记住没有 XAML 的扩展节点

c# - 未经授权的访问异常 : Invalid cross-thread access in Silverlight application (XAML/C#)

silverlight - 如何在 Silverlight 的 XAML 中引用图像的基本 URL?

c# - 命名空间困惑

c# - 使用 AWS 低级 API 将 null AttributeValue 传递到 DynamoDb

c# - LINQ 查询按月对一段时间内的记录进行分组

silverlight - 使用 DependencyProperty 将 ImageBrush 绑定(bind)到模板