2016-12-03 27 views
0

新しいUniversal Windows Platformアプリケーションで、ItemsControlの背景を設定しようとしています。しかし、それは何もしていないようです。私がVSテンプレートに行った唯一の変更は、MainPage.xamlにあります。これは次のようになります:ItemControl背景色

<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> 

結果は次のとおりです。 TextBlockに小麦色のテキストがあるので、ItemsControlのForegroundプロパティは正常に機能しているようです。コントロールのサイズが小さいため、テキストは期待通りにカットオフされます。ただし、背景は表示されません。私は何が欠けていますか?

enter image description here

答えて

1

のItemsControlは、必ずしも直接コントロールの外観に影響を与えない基本クラスレベルでの視覚特性の多くを規定するコントロールから継承します。これらのプロパティは、通常、ControlTemplateのTemplateBindingsを介して参照されます。これにより、望ましい外観が得られます。テンプレートがこれらのプロパティを使用するかどうかによって、それらがまったく使用するかどうかが決まります。

UserControlの背景を変更しても何も起こりません(上記と同じ理由で)。

Grid、Rectangle、Border(など)のような非制御クラスdoは、外観の生成にコントロールのテンプレートで通常使用される要素であるため、このようなプロパティはそのまま使用できます。

ItemsControlから派生したクラス(ListViewなど)が背景プロパティを尊重する理由は、テンプレートのルートレベルの要素の一部が(TemplateBindingを介して)Backgroundプロパティを参照するためです。 ItemsControlにはテンプレートがありません。

Foregroundプロパティが機能する理由は、親からその値を継承するためです。 (一部の依存プロパティは、このような値を継承できます)。

あなたのItemsControlにはボーダー(またはグリッド、they're essentially the same now)でそれをラップすることが、その代わりにその上の背景ブラシを設定しますの背景を設定する最も簡単な方法。

私はあなたが何があなたたとえば、次のやることはお勧めしませんが、これは、あなたが仕事にBackgroundプロパティを望んでいた場合、あなたがする必要があるだろうかです:

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