2014-02-04 2 views
1

У меня есть приложение C# WinRT/8.1, которое использует ListView с дочерней панелью стека для отображения элементов в горизонтальной строке. Это работает отлично, за исключением того, я с теми же проблемами, описанных в этой SO поста:Горизонтальные элементы ListView не прокручиваются при использовании в приложении WinRT?

WinRT Xaml ListView - Touch doesn't scroll well

За исключением хуже. Мои предметы не прокручиваются даже при нажатии пальца на границу между элементами. К сожалению, у меня нет родительского элемента управления Panorama или управления ScrollView. Как я могу это исправить?

ПРИМЕЧАНИЕ: Я переключился на ListView из GridView из-за сообщений SO, которые я прочитал, что указано, что GridView с горизонтальными элементами проблематично, что было для меня.

Вот XAML для страницы:

<Page 
    <!-- headers snipped for brevity --> 
    <Page.Resources> 
     <Converters:DebugBindingConverter x:Key="DebugBindingConverter"/> 
     <Converters:VideomarkLocationToString x:Key="VideomarkLocationToString"/> 
     <common:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> 
     <DataTemplate x:Key="HorzVideomarksItemTemplate1"> 
      <Grid d:DesignWidth="977" d:DesignHeight="746" Height="121" Width="252"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="20*"/> 
        <RowDefinition Height="52*"/> 
        <RowDefinition Height="23*"/> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <TextBlock x:Name="txtLocation" TextWrapping="Wrap" Text="{Binding OffsetSecs, Converter={StaticResource VideomarkLocationToString}}" Grid.Row="2" /> 
       <TextBlock x:Name="txtNote" Text="{Binding Text}" TextTrimming="CharacterEllipsis"/> 
       <Image x:Name="imgThumbnail" Grid.Row="1" Source="{Binding ThumbnailAsync}"/> 
       <!-- <TextBlock x:Name="txtTest2" HorizontalAlignment="Left" Margin="81,93,0,0" TextWrapping="Wrap" 
        Text="{Binding Videomarks, Converter={StaticResource DebugBindingConverter}}" VerticalAlignment="Top" Height="87" Width="150" FontSize="12"/> --> 
      </Grid> 
     </DataTemplate> 
    </Page.Resources> 

    <Grid x:Name="gridPage" 
     Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Margin="25" > 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="897*"/> 
      <ColumnDefinition Width="469*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.ChildrenTransitions> 
      <TransitionCollection> 
       <EntranceThemeTransition/> 
      </TransitionCollection> 
     </Grid.ChildrenTransitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="140"/> 
      <RowDefinition Height="347*"/> 
      <RowDefinition Height="231*"/> 
     </Grid.RowDefinitions> 

     <!-- Back button and page title --> 
     <Grid x:Name="gridTopRow" Grid.ColumnSpan="2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="120"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Button x:Name="backButton" Margin="39,59,39,0" Command="{Binding NavigationHelper.GoBackCommand, ElementName=pageRoot}" 
       Style="{StaticResource NavigationBackButtonNormalStyle}" 
       VerticalAlignment="Top" 
       AutomationProperties.Name="Back" 
       AutomationProperties.AutomationId="BackButton" 
       AutomationProperties.ItemType="Navigation Button"/> 
      <TextBlock x:Name="pageTitle" Text="{StaticResource AppName}" Style="{StaticResource HeaderTextBlockStyle}" Grid.Column="1" TextWrapping="NoWrap" VerticalAlignment="Bottom" Margin="0,0,894,40" Tapped="pageTitle_Tapped"/> 
      <Button x:Name="exitButton" 
       Click="exitButton_Click" 
       Style="{StaticResource ClosePaneAppBarButtonStyle}" Margin="1065,27,0,9" Grid.Column="1" Width="100" Visibility="{Binding Main.IsDebuggerAttached, Converter={StaticResource BooleanToVisibilityConverter}, Mode=OneWay}" /> 
      <Button x:Name="btnTest" Content="test" Grid.Column="1" HorizontalAlignment="Left" Margin="883,59,0,0" VerticalAlignment="Top" FontSize="36" Click="btnTest_Click" Visibility="Collapsed"/> 
     </Grid> 
     <WebView x:Name="webViewVideoPlayer" Grid.Row="1" ScriptNotify="ScriptNotifyPlayLocation" Margin="25" /> 
     <Button x:Name="btnVideomark" Content="Bookmark" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="578,53,0,0" Height="54" FontSize="26.667" Click="btnVideomark_Click" Width="181"/> 
     <ListView 
       x:Name="listviewVideomarks" Grid.Row="2" Grid.ColumnSpan="2" Opacity="1" IsHitTestVisible="False" Margin="20" 
       ItemsSource="{Binding Videomarks.VideomarksCollection, Source={StaticResource Locator}}" 
       ItemTemplate="{StaticResource HorzVideomarksItemTemplate1}" SelectionMode="None" 
        > 
      <ListView.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel x:Name="stackVideomarksHorz" Orientation="Horizontal"> 

        </StackPanel> 
       </ItemsPanelTemplate> 
      </ListView.ItemsPanel> 
     </ListView> 

     <Border x:Name="borderAddVideomark" BorderThickness="5" Grid.ColumnSpan="2" Margin="369,53,319,112" Grid.Row="1" BorderBrush="#FF144989" CornerRadius="25" Opacity="0" IsHitTestVisible="False" Loaded="border_Loaded"> 
      <Grid x:Name="gridAddVideomark" IsHitTestVisible="False" Grid.ColumnSpan="2" Grid.Row="1" Opacity="1" Grid.RowSpan="2"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="187*"/> 
        <ColumnDefinition Width="188*"/> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="189*"/> 
        <RowDefinition Height="137*"/> 
        <RowDefinition Height="62*"/> 
       </Grid.RowDefinitions> 
       <TextBlock x:Name="lblVideomarkLocation" Grid.Column="1" TextWrapping="Wrap" Text="TextBlock" Margin="40,10,10,10" FontSize="18.667"/> 
       <TextBox x:Name="txtVideomarkNote" Grid.Row="1" TextWrapping="Wrap" Grid.ColumnSpan="2" Margin="10,10,10,2"/> 
       <Button x:Name="btnOk" Content="OK" HorizontalAlignment="Left" Margin="92,10,0,0" Grid.Row="2" VerticalAlignment="Top" Width="192" Foreground="White" FontSize="21.333" Height="45" Click="btnOk_Click"/> 
       <Button x:Name="btnCancel" Content="Cancel" HorizontalAlignment="Left" Margin="88,10,0,0" Grid.Row="2" VerticalAlignment="Top" Width="192" Foreground="White" FontSize="21.333" Height="45" Grid.Column="1" Click="btnCancel_Click"/> 
       <Rectangle x:Name="rectVideomarkThumbnail" Fill="#FFF4F4F5" Stroke="Black" Margin="10"/> 
      </Grid> 
     </Border> 
    </Grid> 
</Page> 
+0

Почему «IsHitTestVisible» установлен на false для многих вещей? Кроме того, если вам не нужна вертикальная прокрутка, отключите ее и явно включите горизонтальную прокрутку. Используйте 'ScrollViewer.VerticalScrollBarVisibility' и' ScrollViewer.VerticalScrollMode' (и их горизонтальные копии). –

+0

@NateDiamond Я использую визуальные состояния. Я вырезал это из блока xaml, потому что ни одно из состояний не было активным в момент моего тестирования, поэтому они не должны быть активными. С ними блок XAML был бы намного дольше и сложнее просеять. –

+0

Возможно, вы захотите попробовать сыграть с 'ScrollViewer.HorizontalScrollChaining'. –

ответ

2

Я не уверен, какие направления вы пытаетесь прокрутить, но я думаю, ваша проблема будет решена, если отключить StackPanel прокрутки и дают возможность прокрутки в обоих направления на ListView.

<ListView 
    x:Name="listviewVideomarks" Grid.Row="2" Grid.ColumnSpan="2" Opacity="1" IsHitTestVisible="False" Margin="20" 
    ItemsSource="{Binding Videomarks.VideomarksCollection, Source={StaticResource Locator}}" 
    ItemTemplate="{StaticResource HorzVideomarksItemTemplate1}" SelectionMode="None" 
    ScrollViewer.HorizontalScrollMode="Auto" ScrollViewer.VerticalScrollMode="Auto" 
    > 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel x:Name="stackVideomarksHorz" Orientation="Horizontal" 
       ScrollViewer.HorizontalScrollMode="Disabled" 
       ScrollViewer.VerticalScrollMode="Disabled"> 

      </StackPanel> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 
Смежные вопросы