2011-06-12 8 views
2

WrapPanel의 ListBox에있는 ItemsPanel을 바꾸려고하는데 스타일의 ItemsPanelTemplate이 영향을 미치지 않는 것 같습니다. 테두리와 배경색이 변경되기 때문에 스타일이 발견되고 적용되지만 스눕으로 검사하면 WrapPanel이 표시되지 않습니다.ItemsPanel 템플릿이 적용되지 않음

<ListBox x:Name="lstCocktails" PreviewKeyDown="dg_PreviewKeyDown" ItemsSource="{Binding Source={StaticResource drinksSource}}" SelectedItem="{Binding SelectedItem,ElementName=root,Mode=TwoWay}" Style="{StaticResource CocktailGrid}" 
      SelectionMode="Single" MouseDoubleClick="lstCocktails_MouseDoubleClick"> 

스눕 시각적 트리 : 응용 프로그램의 다른 부분에 있지만 어떤 이유로 Snoop visual tree

내가 무시했습니다 ItemsPanels이 하나가 저를 벗어난 그대로

<Style x:Key="CocktailGrid" TargetType="ListBox" BasedOn="{StaticResource {x:Type ListBox}}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="Background" Value="White" /> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="BorderBrush" Value="Black" /> 
    <Setter Property="OverridesDefaultStyle" Value="true" /> 
    <Setter Property="SelectionMode" Value="Single" /> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <WrapPanel 
        IsItemsHost="True" 
        Width="{Binding 
           Path=ActualWidth, 
           RelativeSource={RelativeSource 
            Mode=FindAncestor, 
            AncestorType= 
            {x:Type ScrollContentPresenter}}}" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="ItemTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="80" /> 
         <RowDefinition Height="*"/> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 
        <Image Grid.Row="0" Source="{Binding ImageName}" Height="80" Stretch="Uniform"/> 
        <TextBlock Grid.Row="1" Text="{Binding Name}" TextWrapping="Wrap" TextTrimming="CharacterEllipsis"/> 
       </Grid> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

목록 상자는 선언

답변

1

ItemsTemplate 대신에 이것을 사용하십시오.

 <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBox"> 
       <Border Background="{TemplateBinding ListBox.Background}" CornerRadius="5"> 
        <WrapPanel IsItemsHost="True"/> 
       </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

작동합니다.

+0

감사합니다. 잘 작동합니다. – Echilon