2016-12-03 3 views
0

새로운 Universal Windows 플랫폼 응용 프로그램에서 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> 

결과는 다음과 같습니다. ItemsControl의 Foreground 속성은 TextBlock에 밀색 텍스트가 있으므로 잘 작동하는 것 같습니다. 작은 크기의 컨트롤 때문에 예상대로 텍스트가 잘립니다. 그러나 배경은 표시되지 않습니다. 내가 뭘 놓치고 있니?

enter image description here

답변

1

는 ItemsControl에 반드시 직접 컨트롤의 모양에 영향을주지 않는 기본 클래스 수준에서 시각적 속성을 많이 정의 컨트롤에서 상속합니다. 이러한 속성은 일반적으로 ControlTemplate의 TemplateBindings를 통해 참조되며 원하는 모양이 나타납니다. 템플릿에서 이러한 속성을 사용하는지 여부에 따라 사용 여부가 결정됩니다.

UserControl의 배경을 변경해도 위와 같은 이유로 아무것도 수행하지 않습니다.

Grid, Rectangle, Border (등)와 같은 비 제어 클래스 do은 일반적으로 특정 모양을 생성하기 위해 컨트롤 템플릿에 일반적으로 사용되는 요소이므로 이러한 속성은 기본적으로 사용됩니다.

ItemsControl 파생 클래스 (예 : ListView)가 background 속성을 사용하는 이유는 템플릿의 루트 수준 요소 중 일부가 TemplateBinding을 통해 Background 속성을 참조하기 때문입니다. ItemsControl에는 템플릿이 없습니다.

전경 속성이 작동하는 이유는 부모로부터 그 값을 상속하기 때문입니다. 일부 종속성 속성은 이와 같은 값을 상속받을 수 있습니다.

당신의 ItemsControl에 테두리에 포장하는 것에 대한 배경을 설정하는 가장 쉬운 방법 (또는 그리드, they're essentially the same now)와 대신 에 배경 브러시를 설정합니다.

나는 당신이 무엇을 당신의 예를 들면 다음과 수행하지 않는 것이 좋습니다,하지만 당신이 일을하기 위해 배경 속성을 원한다면 당신이 할 필요가 무엇 :

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