2014-02-20 64 views
2

我在ListView上應用了以下樣式。但是這個Style導致我的GridView隱藏它的標題行。如果我從ListView中刪除這個樣式。標題行被看到。我應該如何調整這種風格來顯示標題行?由於自定義樣式而影響ListView GridViewColumn的可見性

<Style x:Key="listViewStyle" TargetType="{x:Type ListView}"> 
    <Setter Property="Background" Value="Black"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
    <Setter Property="ScrollViewer.PanningMode" Value="Both"/> 
    <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
    <Setter Property="VerticalContentAlignment" Value="Center"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBox}"> 
       <!--<Border x:Name="Bd" BorderBrush="White" Opacity="0.1" BorderThickness="2" Background="{TemplateBinding Background}" Padding="1.5" SnapsToDevicePixels="true">--> 
       <Grid> 
        <Border x:Name="Bd" BorderBrush="White" Opacity="0.1" Background="{TemplateBinding Background}" Padding="1.5" SnapsToDevicePixels="true" /> 
        <!--<Border CornerRadius="5" Background="White" Opacity="0.1" />--> 
        <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}" Template="{DynamicResource TreeViewScrollViewerControlTemplate}" > 
         <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        </ScrollViewer> 
       </Grid> 
       <!--</Border>--> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsEnabled" Value="false"> 
         <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
        </Trigger> 
        <Trigger Property="IsGrouping" Value="true"> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

下面是我的ListView的XAML:

<ListView ItemsSource="{Binding PersonList}" Width="750" MaxWidth="750" ScrollViewer.HorizontalScrollBarVisibility="Disabled" VerticalAlignment="Top" Height="200" 
       HorizontalAlignment="Right" Margin="20" util:GridViewSort.AutoSort="True"> 
     <ListView.Style> 
      <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource listViewStyle}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=gridViewRB, Path=IsChecked}" Value="true"> 
         <Setter Property="View" Value="{StaticResource ResourceKey=GridView}" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ListView.Style> 
    </ListView> 

而且我的GridView:

<GridView x:Key="GridView"> 
    <GridViewColumn> 
     <GridViewColumn.HeaderTemplate> 
      <DataTemplate> 
       <CheckBox Name="cbSelectAll" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}, Path=DataContext.SelectAllCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      </DataTemplate> 
     </GridViewColumn.HeaderTemplate> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 
    <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}" util:GridViewSort.PropertyName="WeightInGrams" /> 
    <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}" /> 
    <GridViewColumn Header="Ip Address" DisplayMemberBinding="{Binding Path=IpAddress}" /> 
</GridView> 

回答

1

問題出現在您的ScrollViewer上,它包裝在ItemsPresenter上。

<ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}" 
       Template="{DynamicResource TreeViewScrollViewerControlTemplate}" > 
    <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
</ScrollViewer> 

您還沒有發佈模板TreeViewScrollViewerControlTemplate。我想你在那邊失蹤了GridViewHeaderRowPresenter

無論如何,您可以使用默認樣式,即GridView.GridViewScrollViewerStyleKey

<ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}" 
     Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"> 
    <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
</ScrollViewer>