ItemsControl 背景色

ItemControl background color

在新的通用 Windows 平台应用程序中,我正在尝试设置 ItemsControl 的背景。但它似乎没有做任何事情。我对 VS 模板所做的唯一更改是 MainPage.xaml,现在看起来像这样:

<Page
    x:Class="UWPPlayground.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWPPlayground"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" x:Name="Hello">
  <Grid Background="Blue">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*">

      </ColumnDefinition>
      <ColumnDefinition Width="*">

      </ColumnDefinition>
    </Grid.ColumnDefinitions>
    <ItemsControl Grid.Row="0" Grid.Column="0" Width="60" Height="30" Foreground="Wheat" Background="White">
      <TextBlock Text="Hello World!"></TextBlock>
      <TextBlock Text="Can you see this?"></TextBlock>
    </ItemsControl>
    <Grid Grid.Row="0" Grid.Column="1" Background="Purple"></Grid>
    </Grid>
</Page>

结果如下图。 ItemsControl 的前景 属性 似乎工作正常,因为 TextBlocks 具有小麦色文本。由于控件的尺寸较小,文本如预期的那样被截断。然而,背景是不可见的。我错过了什么?

ItemsControl 继承自 Control,它在基础 class 级别定义了许多视觉属性,这些属性不一定会直接影响控件的外观。这些属性通常通过 ControlTemplate 中的 TemplateBindings 引用,然后产生所需的外观。模板是否使用这些属性决定了它们是否有任何用处。

您会注意到更改 UserControl 的背景也没有任何作用(出于与上述相同的原因)。

非控件 class 像网格、矩形、边框(等) 开箱即用地尊重这些属性,因为这些是通常用于产生特定外观的控件模板。

ItemsControl 派生的 classes(如 ListView)支持背景 属性 的原因是因为其模板中的某些根级元素引用了背景 属性(通过模板绑定)。 ItemsControl 本身没有模板。

我认为 Foreground 属性 工作的原因是因为它将从父级继承它的值。 (一些依赖属性可以像这样继承它们的值)。

为 ItemsControl 设置背景的最简单方法是将其包裹在边框(或网格,they're essentially the same now)中并在 that 上设置背景画笔相反。

我不建议您按照示例执行以下操作,但如果您希望背景 属性 正常工作,则需要执行以下操作:

<ItemsControl Background="Red">
    <ItemsControl.Template>
        <ControlTemplate TargetType="ItemsControl">
            <Grid Background="{TemplateBinding Background}">
                <ItemsPresenter/>
            </Grid>
        </ControlTemplate>
    </ItemsControl.Template>
</ItemsControl>