winrt-xaml如何滚动stackpanel的内容?

时间:2013-09-10 06:46:54

标签: xaml windows-store-apps winrt-xaml

我有一个滚动条,当我站在它上面时,滚动得很好,但是如果我站在堆叠面板内的内容(用滚动查看器包裹),滚动条不起作用,为什么?

<ScrollViewer Grid.Column="0" VerticalScrollMode="Enabled" VerticalScrollBarVisibility="Auto">
    <StackPanel Orientation="Vertical">
        <TextBlock Text="Participants" />
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <TextBlock Text="{Binding Path=Users.Count}" />
            <TextBlock Text="/" />
            <TextBlock Text="{Binding MaxParticipants}" />
        </StackPanel>
        <ListView ItemsSource="{Binding Users}" Tapped="User_Tapped">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ListViewItem IsHitTestVisible="False">
                        <StackPanel>
                            <facebookControls:ProfilePicture ProfileId="{Binding FacebookId}" />
                            <TextBlock Text="{Binding UserName}" />
                        </StackPanel>
                    </ListViewItem>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackPanel>
</ScrollViewer>

1 个答案:

答案 0 :(得分:2)

问题是ListView有自己的Scroll查看器,因此当您滚动ListView时,ListView滚动查看器会获得滚动事件。
如果您不需要选择项目,那么最简单的方法就是用ItemsControl替换ListView 如果需要选择项目,则可以从ListView的样式中删除ScrollViewer。这是一个没有scrollviewer的ListView样式:

<Style x:Key="ListViewStyle1" TargetType="ListView">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListView">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                    <ItemsPresenter HeaderTemplate="{TemplateBinding HeaderTemplate}" Header="{TemplateBinding Header}" HeaderTransitions="{TemplateBinding HeaderTransitions}" Padding="{TemplateBinding Padding}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

此外,如果你使用ListView,你不应该使用Tapped="User_Tapped"来获取用户被点击时的事件,而应该设置IsItemClickEnabled="True"并使用ItemClicked事件