2012-09-06 4 views
3

DataTemplate을 사용하는 ListBox이 있습니다. ListBoxItemsTextBlockComboBox으로 표시됩니다. 이제 내부 스타일 ComboBoxes에 사용하지 않고 ListBoxItems에 스타일을 사용하고 싶습니다. 죄송하지만 ComboBoxItemListBoxItem에서 상속됩니다. 아니면 여기에 뭔가 빠졌나요? ComboboxItem 내부에 영향을 미치지 않고 ListBoxItem에 스타일 적용

<ListBox Grid.Row="1" Grid.Column="1" Name="comboBoxI" Margin="2" 
       ItemsSource="{Binding SomeCollection}" IsSynchronizedWithCurrentItem="True"> 
    <ListBox.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Style.Resources> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/> 
      </Style.Resources> 
     </Style> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" Width="320" Padding="1,1,1,1" 
         <TextBlock.ToolTip> 
          <ToolTip Content="{Binding Path=Description}"/> 
         </TextBlock.ToolTip> 
       </TextBlock> 
       <ComboBox ItemsSource="{Binding SomeOtherCollection}" IsSynchronizedWithCurrentItem="True" 
        <ComboBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding CreationInfo}" Width="Auto" Padding="1,1,1,1"> 
           <TextBlock.ToolTip> 
            <ToolTip Content="{Binding Path=Description}"/> 
           </TextBlock.ToolTip> 
          </TextBlock> 
         </DataTemplate> 
        </ComboBox.ItemTemplate> 
       </ComboBox> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

는 또한 ComboBoxItem 또 다른 스타일을 추가했지만,이 경우에 나는 기본값으로 색상을 다시 설정하는 방법을 모르겠어요.

의견을 보내 주셔서 감사합니다.

헨드릭.

+1

목록을 표시하고 싶지만 선택 기능이 필요하지 않은 경우 ListBox 대신 ItemsControl을 사용할 수 있습니다. – LPL

+0

스타일 선택으로 선택 기능을 숨기려고 실제로 시도한 것처럼 좋은 힌트입니다. :) ScrollViewer 안에 ItemsControl을 래핑했고 멋지게 작동하는 것 같습니다. 필자는 여전히 ListBox/ComboBox/Styles를 사용하는 솔루션에 관심이 있습니다. – Hendrik

답변

1

아마도 더 좋은 해결책이있을 것입니다. 그러나 당신이 언급 한 바와 같이 기본 색상으로 복원 할 수 :

<Style TargetType="ComboBoxItem"> 
    <Style.Resources> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{x:Static SystemColors.HighlightTextColor}"/> 
     <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.ControlColor}"/> 
    </Style.Resources> 
</Style> 

불행하게도 당신이 시스템이 모든 내부 컨트롤에 대해 유효 브러쉬 변경 때문에 작동하지 않습니다 만 ListBox.ItemContainerStyleListBoxListBoxItem 스타일을 적용

및 아니 ListBoxItem 속성.

관련 문제