2013-04-25 11 views
1

저는 WPF 초보자입니다. 내가 좋아하는 것ListBoxItem에서 내용의 배경색을 변경하십시오.

<ListBox Background="Transparent" BorderBrush="Transparent"> 
    <ListBox.Style> 
     <Style> 
      <Style.Resources> 
       <!-- Background of selected item when focussed --> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
       <!-- Background of selected item when not focussed --> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 
      </Style.Resources> 
     </Style> 
    </ListBox.Style> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Border Margin="5" BorderThickness="2" BorderBrush="LightGray" CornerRadius="5"> 
       <Expander IsExpanded="True" Background="#f7f7f7"> 
        <!-- Content --> 
       </Expander> 
      </Border> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ListBox> 

동작은 선택한 항목이 있는지의 확장 배경 색상이 어두운 (예를 들어 #의 e0e0e0) 될 수있다 : 나는 (확장기 그들 주위에 테두리가) 확장기를 포함하는 목록 상자가 있습니다. ListBoxItem (이 코드에 표시되어 있음)의 배경색을 숨길 수있는 예제를 발견했지만 ListBoxItem에서 내용의 배경색을 변경하는 데는 좋은 소스가 없습니다. 이 작업을 수행하려면 트리거를 설정해야하지만 ListBox 나 Expander의 트리거가 될 지 여부는 모르겠다.

적절한 트리거를 어떻게 설정합니까?

+0

당신이 –

+0

트리거 같은 일을 평가하는 조건을 필요로 할 수있는 아주 좋은 도구입니다 Expression Blend를 시도 할 수 있습니다, 어떤 조건 당신이 원하는 않습니다. 트리거는 데이터 값을 기반으로합니까? 아니면 단순히 해당 행/항목이 선택되거나 확장 될 때입니까? –

답변

1
<DataTemplate> 
    <Border Margin="5" BorderThickness="2" BorderBrush="LightGray" CornerRadius="5"> 
     <Expander IsExpanded="True" Background="#f7f7f7" Name="expander"> 

     </Expander> 
    </Border> 
    <DataTemplate.Triggers> 
    <DataTrigger Binding="{Binding IsSelected,RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True"> 
     <Setter Property="Background" Value="#e0e0e0" TargetName="expander"/> 
    </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
+0

위대한 작품; 고맙습니다. –

관련 문제