双击网格视图项的事件

时间:2013-10-22 07:29:56

标签: c# xaml windows-8 windows-runtime

双击后是否有任何方法可以获取网格视图项目。我没有在metro gird视图中找到双击事件。只有ItemClickPointerPressed等活动在那里。有什么建议吗?

<GridView Name="downloadGrid"
          HorizontalAlignment="Left"
          ItemsSource="{Binding Source={StaticResource CollectionItems}}"
          Grid.Column="0" Grid.Row="2" PointerPressed="downloadGrid_PointerPressed"
          ItemContainerStyle="{StaticResource CustomGridViewItemStyle}" 
          Width="Auto" SelectionChanged="downloadGrid_SelectionChanged">
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapGrid Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid Margin="6" Height="280" Width="200">
                <Grid.RowDefinitions>
                    <RowDefinition Height="120"/>
                    <RowDefinition Height="35"/>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="30"/>
                </Grid.RowDefinitions>

                <Image Source="{Binding Path=Thumbnail}" HorizontalAlignment="Left" Grid.Row="0" Stretch="Fill"/>
                <Image Grid.Row="0" Source="{Binding Path=Type, Converter={StaticResource Icon}}" MaxWidth="20" MinWidth="20" VerticalAlignment="Bottom" HorizontalAlignment="Left"/>
                <TextBlock Text="{Binding Path=Caption}" TextWrapping="Wrap" Foreground="#FF017DD5" Grid.Row="1" HorizontalAlignment="Left" FontSize="11" Margin="3,0,0,0" Height="Auto"/>
                <ProgressBar Grid.Row="2" Value="{Binding Path=PercentOfCompletion, Converter={StaticResource ProgressConverter}}" Width="75" Height="11" HorizontalAlignment="Left" VerticalAlignment="Center" FontFamily="Segoe UI" BorderThickness="1" Foreground="#FF78D200" Margin="3,0,0,0">
                    <ProgressBar.BorderBrush>
                        <SolidColorBrush Color="#FF78D200"/>
                    </ProgressBar.BorderBrush>
                </ProgressBar>
                <!--<TextBlock Grid.Row="2" Text="{Binding Path=PercentOfCompletion, Converter={StaticResource ProgressConverter}}" Margin="-15,0,15,0" VerticalAlignment="Center" HorizontalAlignment="Center" FontFamily="Segoe UI" Foreground="#333333" FontSize="12"/>-->
                <TextBlock Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Center" Text="{Binding Path=StatusInfo}" Style="{StaticResource MainPageTextStyle}" Margin="0,0,5,0"/>
                <Button x:Name="playNow" Grid.Row="3" Content="Play Now" HorizontalAlignment="Left" VerticalAlignment="Center" Style="{StaticResource DownloadButtonStyle}" Click="playNow_Click" Margin="3,0,0,0" IsEnabled="{Binding IsPlay}"/>
                <Button x:Name="pauseResumeBUtton" Grid.Row="3" Content="Pause" HorizontalAlignment="Right" VerticalAlignment="Center" Style="{StaticResource DownloadButtonStyle}" Click="pauseResumeBUtton_Click" Margin="0,4,3,2" IsEnabled="{Binding IsResume}"/>
                <TextBlock Grid.Row="4" HorizontalAlignment="Left" VerticalAlignment="Center" Text="Size: " Style="{StaticResource MainPageTextStyle}" Margin="5,0,0,0"/>
                <TextBlock Grid.Row="4" HorizontalAlignment="Right" VerticalAlignment="Center" Text="{Binding Path=OriginalFileSize, Converter={StaticResource FileSizeConverter}}" Style="{StaticResource MainPageTextStyle}" Margin="0,9,5,6"/>
                <!--<TextBlock Grid.Row="5" HorizontalAlignment="Left" VerticalAlignment="Top" Text="Output: " Style="{StaticResource MainPageTextStyle}" Margin="5,0,0,0"/>
                <TextBlock Grid.Row="5" HorizontalAlignment="Right" VerticalAlignment="Top" Text="iPhone / iPod" Foreground="#FF017DD5" FontSize="12" Margin="0,2,5,0"/>-->
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

2 个答案:

答案 0 :(得分:1)

使用Tapped(或DoubleTapped)事件的问题是这些事件仅在检测到点按手势时触发。 “嗯,是的。这正是我想要的”,你可能会说。

Buuuuuut 如果您使用鼠标并且单击您的项目并且在释放手指之前鼠标移动了一点(或很多),则该事件不< / strong>被认可为Tap。因此事件不会触发。这可能导致用户不理解为什么他的点击不被识别。这可以轻松,一致地再现。

潜在的Hacky解决方案

我目前能够想到实现你要做的事情的唯一方法是使用ItemClick事件。单击GridViewItem时,启动计时器。下次ItemClick事件触发时,检查是否在合理的时间内点击了相同的项目(500毫秒?更少?我确定这是一个快速的谷歌)。

当然,你必须确保你要停止计时器和所有这些东西。

答案 1 :(得分:0)

正如VasileMarianFălămaş在您的问题的评论中写道,您可以使用双击事件。

但是,如果您想在网格项上进行双击事件,则应该问自己。 Windows 8的最佳功能之一是应用程序应用程序的功能相同。用户不应该考虑是否应该双击或只是点击此应用程序。

双击时你想做什么动作?打开物品?这通常是通过单击完成的。

此处概述了Windows 8应用程序中使用哪些手势: http://msdn.microsoft.com/en-us/library/windows/apps/hh761498.aspx