none
GridView的HScroll问题 RRS feed

  • 问题

  • 我添加了一个GridView,里面有7行,超出的显示页面的范围,此时想查看第6 7行的Item,发现HScroll不能拉,GridView的HScroll是不是没做用的啊?
    2012年6月25日 9:28

答案

  • 你把外面的ScrollViewer垂直滚动条禁用了,虽然你启用了GridView的垂直滚动条,然是GridView的高度被写死并且已经超出外面的ScrollViewer的高度420, 所以GridView的滚动条并没有出现滑块,但是ScrollViewer也出现不了垂直滚动条。

    你把ScrollViewer和GridView的垂直滚动条设置调换一下既可。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Clorance 2012年6月26日 9:38
    2012年6月26日 8:49
    版主
  • 你的 WrapGrid 的 MaximumRowsOrColumns="7" 意思是如果可以放置更多元素则最多放置7行。但是我们要写死GridView的高度,所以他这里放置5行发现放不下了,他就换列了。WrapGrid 实际就是一个遇到溢出换行换列的面板,你将它作为GridView的ItemsPanel 则就是这个效果,与是否是ListView GridView无关。 你在ListView.ItemsPanel上用这个也是一样的效果。

    你这里不是他隐藏了6、7行,而是本来就没有,他直接转到第二列去了。你仔细观察下是不是。所以这种情况下,是不需要垂直滚动条了,并不会隐藏你的数据。



    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Clorance 2012年6月27日 6:22
    2012年6月27日 6:17
    版主

全部回复

  • 请提供你的代码。 HScroll应当可以正常。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年6月26日 2:30
    版主
  • 请提供你的代码。 HScroll应当可以正常。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    谢谢您,这个问题解决了。另问在GridView中VScroll也是能使用的吗?



    2012年6月26日 3:27
  • 是的, 只要垂直方向超出范围而且你设置了 ScrollViewer.VerticalScrollBarVisibility="Visible/Auto" ,就会出现垂直滚动条。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月26日 3:59
    版主
  • 是的, 只要垂直方向超出范围而且你设置了 ScrollViewer.VerticalScrollBarVisibility="Visible/Auto" ,就会出现垂直滚动条。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    您好,Bob Bao,我参考微软XAML ListView and GridView essentials sample这个例子新建了一个工程,其中遇到如下问题:

    1、初始设置一个页面,在页面添加GridView,这个页面的高度是固定了的,然后Item的添加行数达到页面的高度值之后,无法容纳更多行的Item,但列却可以无限添加。ListView不存在不能添加行的问题。

    2、我在页面添加了一个Canvans,在Blend中把它的高度调到能容纳7行的Item,VScroll设置了Visible,它不可用。

    以上两个问题怎么解决?


    2012年6月26日 6:55
  • 贴出你的代码,特别是GridView.ItemsPanel是什么?是否是垂直分布的布局还是水平分布的。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月26日 7:14
    版主
  • 贴出你的代码,特别是GridView.ItemsPanel是什么?是否是垂直分布的布局还是水平分布的。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    <DataTemplate x:Key="StoreFrontTileTemplate"> <Grid HorizontalAlignment="Left" > <StackPanel Orientation="Horizontal" Margin="10,10,0,0"> <Image Source="{Binding Image}" Height="60" Width="60" VerticalAlignment="Center" Margin="0,0,10,0"/> <StackPanel Margin="0,0,0,0" Orientation="Vertical"> <TextBlock TextWrapping="Wrap" Style="{StaticResource ItemTitleStyle}" Width="200" VerticalAlignment="Center" Text="{Binding Title}" HorizontalAlignment="Left" FontFamily="Segoe UI" /> <TextBlock TextWrapping="Wrap" Style="{StaticResource ItemSubtitleStyle}"

    Width="200" MaxHeight="20" VerticalAlignment="Center" Text="{Binding Category}" HorizontalAlignment="Left"/> </StackPanel> </StackPanel> <Grid.Background> <ImageBrush ImageSource="Images/weather_bg.png" Stretch="Fill" /> </Grid.Background> </Grid> </DataTemplate> <Style x:Key="ItemTitleStyle" TargetType="TextBlock"> <Setter Property="FontFamily" Value="Segoe UI Light"/> <Setter Property="Foreground" Value="#FF2A2A2A"/> <Setter Property="FontSize" Value="14.667"/> </Style> <Style x:Key="ItemSubtitleStyle" TargetType="TextBlock"> <Setter Property="FontFamily" Value="Segoe UI Light"/> <Setter Property="Foreground" Value="#FF707070"/> <Setter Property="FontSize" Value="14.667"/> </Style> <Style x:Key="StoreFrontTileStyle" TargetType="GridViewItem"> <Setter Property="FontFamily" Value="Segoe UI" /> <Setter Property="Foreground" Value="White" /> <Setter Property="Height" Value="80" /> <Setter Property="Width" Value="280" /> <Setter Property="Padding" Value="0" /> <Setter Property="Margin" Value="0,0,8,8" /> <Setter Property="HorizontalContentAlignment" Value="Left" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="BorderThickness" Value="0"/> <Setter Property="TabNavigation" Value="Local" /> </Style> <ItemsPanelTemplate x:Key="StoreFrontGridItemsPanelTemplate"> <WrapGrid MaximumRowsOrColumns="7" VerticalChildrenAlignment="Top" HorizontalChildrenAlignment="Left"/> </ItemsPanelTemplate>

    <StackPanel Margin="0,-3,200,3" Grid.ColumnSpan="3" Width="800" Height="480" >
        <ScrollViewer Grid.Column="1" Width="800" Height="420" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Top" HorizontalAlignment="Center" HorizontalContentAlignment="Center" Margin="-2,0,2,0">
                <Canvas x:Name="m_canvas" Width="800" Height="700">
                   <!-- <Canvas.Resources>
                        <Storyboard x:Name="CanvasStoryboardDOWN">
                            <DoubleAnimation x:Name="GridViewAnimationDOWN"
                                                    Storyboard.TargetName="ItemGridView"
                                                    Storyboard.TargetProperty="(Canvas.Top)"
                                                    Duration="0:0:0.35"
                                                    To="0" />
                        </Storyboard>
                        <Storyboard x:Name="CanvasStoryboardUP">
                            <DoubleAnimation x:Name="GridViewAnimationUP"
                                                    Storyboard.TargetName="ItemGridView"
                                                    Storyboard.TargetProperty="(Canvas.Top)"
                                                    Duration="0:0:0.35"                          
                                                    To="-700" />
                        </Storyboard>
                    </Canvas.Resources>-->
    
    
                    <GridView x:Name="ItemGridView" Width="800" Height="700" 
                                   
                    ItemTemplate="{StaticResource StoreFrontTileTemplate}"
                    ItemContainerStyle="{StaticResource StoreFrontTileStyle}"
                    ItemsPanel="{StaticResource StoreFrontGridItemsPanelTemplate}"
                    BorderBrush="LightGray"
                    BorderThickness="1" VerticalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Visible"
                    ScrollViewer.HorizontalScrollBarVisibility="Visible"  IsItemClickEnabled="True" ItemClick="AddCity_ItemClickHandler"
                              Background="White">
                        
                    </GridView>
                </Canvas>
    
            </ScrollViewer>
    
        </StackPanel>
    上面的代码。


    2012年6月26日 7:52
  • 你把外面的ScrollViewer垂直滚动条禁用了,虽然你启用了GridView的垂直滚动条,然是GridView的高度被写死并且已经超出外面的ScrollViewer的高度420, 所以GridView的滚动条并没有出现滑块,但是ScrollViewer也出现不了垂直滚动条。

    你把ScrollViewer和GridView的垂直滚动条设置调换一下既可。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Clorance 2012年6月26日 9:38
    2012年6月26日 8:49
    版主
  • 感谢Bob的解答,根据你的提示进行的修改,效果是有了,但我想要的是GridView自己的垂直滚动条,我把外面的ScrollViwer去掉了,把GridView的高度定义为自动的,GridView得垂直滚动条设置为Visible,它仍不可以拉。

    2012年6月27日 1:54
  • 那你就不需要外面的ScrollViewer, 直接将GridView高度设成480既可。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月27日 2:23
    版主
  • 你好Bob,我根据你的提示做了,但仍达不到我想要的效果。如图,水平滚动条是有了,垂直的没有滑块,有没相应的例子可以看?

    我想知道

    1、GridView的垂直滚动条能不能达到和ListView的垂直滚动条一样的功能,如果可以的话,那GridView的垂直滚动条使用条件是?

    2、Listview可以任意添加Item行,Gridview添加的Item行,和它的Height的设置有关?

    2012年6月27日 3:12
  • 你的 WrapGrid 的 MaximumRowsOrColumns="7" 意思是如果可以放置更多元素则最多放置7行。但是我们要写死GridView的高度,所以他这里放置5行发现放不下了,他就换列了。WrapGrid 实际就是一个遇到溢出换行换列的面板,你将它作为GridView的ItemsPanel 则就是这个效果,与是否是ListView GridView无关。 你在ListView.ItemsPanel上用这个也是一样的效果。

    你这里不是他隐藏了6、7行,而是本来就没有,他直接转到第二列去了。你仔细观察下是不是。所以这种情况下,是不需要垂直滚动条了,并不会隐藏你的数据。



    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Clorance 2012年6月27日 6:22
    2012年6月27日 6:17
    版主