首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListView GridViewColumn可见性因自定义样式而影响

ListView GridViewColumn可见性因自定义样式而影响
EN

Stack Overflow用户
提问于 2014-02-20 16:04:50
回答 2查看 880关注 0票数 2

我已经在我的ListView上应用了以下样式。但是这种样式导致我的GridView隐藏其标题行。如果我从ListView中删除此样式。可以看到标题行。如何调整此样式以显示标题行?

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 17:11:10

问题在您的ScrollViewer包装在ItemsPresenter上。

代码语言:javascript
运行
复制
<ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"
              Template="{DynamicResource TreeViewScrollViewerControlTemplate}" >
   <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>

您还没有发布模板TreeViewScrollViewerControlTemplate。我猜你在那边想GridViewHeaderRowPresenter了。

无论如何,您可以使用默认样式,即GridView.GridViewScrollViewerStyleKey

代码语言:javascript
运行
复制
<ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}"
      Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
  <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
票数 1
EN

Stack Overflow用户

发布于 2014-02-20 16:12:44

如果您查看示例ListView模板,可以看到头是使用GridViewHeaderRowPresenter呈现的。

您需要在样式的控制模板中添加一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21913181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档