C# UWP中的GridView
我面临GridView控件的问题。我们在8.1上有一个Windows应用商店应用程序,GridView的鼠标左键和右键点击具有不同的功能。在鼠标左键单击的情况下,我们使用“ItemClick”事件执行到另一个XAML页面的导航。右键单击GridItem,它被选中并显示appbar,我们使用了“SelectionChanged”事件 我们现在正在将现有的windows应用商店应用程序迁移到UWP应用程序,我们使用了相同的gridView代码,我们发现功能和外观有显著差异,我们没有看到像上图那样选择gridView项目。我们看到“ItemClick”和“SelectionChanged”正在协同工作。流程类似于左键单击项目,控件转到SelectionChanged事件,然后单击项目。我们无法区分像鼠标左键单击和鼠标右键单击这样的操作,因为这两个事件都是在单击鼠标左键/点击时触发的。我们在鼠标左键和右键上有不同的功能C# UWP中的GridView,c#,gridview,selecteditem,uwp,C#,Gridview,Selecteditem,Uwp,我面临GridView控件的问题。我们在8.1上有一个Windows应用商店应用程序,GridView的鼠标左键和右键点击具有不同的功能。在鼠标左键单击的情况下,我们使用“ItemClick”事件执行到另一个XAML页面的导航。右键单击GridItem,它被选中并显示appbar,我们使用了“SelectionChanged”事件 我们现在正在将现有的windows应用商店应用程序迁移到UWP应用程序,我们使用了相同的gridView代码,我们发现功能和外观有显著差异,我们没有看到像上图那样选
需要有关如何在UWP中模拟windows 8.1功能的帮助。没错,交互模型行为发生了变化。根据MSDN文章
- 对于选择,将IsItemClickEnabled设置为false,将SelectionMode设置为false 除ListViewSelectionMode.None之外的任何值,并处理 SelectionChanged事件(在这种情况下不会引发ItemClick)
- 对于调用,将IsItemClickEnabled设置为true,将SelectionMode设置为true ListViewSelectionMode.None并处理ItemClick事件 (在这种情况下,不会引发SelectionChanged)
- 另一种组合是将IsItemClickEnabled设置为false和 SelectionMode至ListViewSelectionMode.None。这是只读的 配置
- 最后一个最不常用的配置是设置 IsItemClickEnabled为true,SelectionMode为除 ListViewSelectionMode.None。在此配置中,单击第一项是 引发,然后引发SelectionChanged
Tapped
和rightstapped
事件处理程序可以帮助您更容易地区分这两者
我的要求是,我想使用右键单击/长按选择一个项目,并从应用程序栏按钮中相应地执行操作,左键单击/长按应将我重定向到下一个XAML页面。我面临的问题是右键单击,我无法检测到GridView的哪些项目已被单击,如何将其添加到SelectedItem 我所做的是,在GridView的DataTemplate中引入了额外的网格。在这个网格中,我添加了rightstapped事件 示例代码段如下所示
<GridView x:Name="ItemGridView"
ItemsSource="{Binding Source={StaticResource ItemsViewSource}}"
IsItemClickEnabled="True"
SelectionMode="Single" ItemClick="ItemGridView_ItemClick"
SelectionChanged="ItemGridView_SelectionChanged">
<GridView.ItemTemplate>
<DataTemplate>
<Grid RightTapped="Grid_RightTapped">
<Border Background="White" BorderThickness="0" Width="210" Height="85">
<TextBlock Text="{Binding FileName}" />
</Border>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
我们这样做的原因是,现在我们可以使用右键单击将单击的项目添加到GridViewSelectedItem。现在在UWP中,单击的项目仅使用左键单击添加到SelectedItem中。通过左键单击,我可以使用ItemClick事件导航到另一个页面。要识别左键单击和右键单击,右键单击可以使用rightstapped事件
<GridView x:Name="categoryItemsGV"
Margin="5,5,0,0"
IsItemClickEnabled="True"
ItemClick="categoryItemsGV_ItemClick"
IsRightTapEnabled="True"
RightTapped="categoryItemsGV_RightTapped"
SelectionMode="Single"
SizeChanged="categoryItemsGV_SizeChanged"
ItemsSource="{Binding}">
从右击可以从e.OriginalSource获得鼠标右击的项目
<GridView x:Name="myGridView" VerticalAlignment="Center">
<GridView.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Reset"/>
<MenuFlyoutSeparator/>
<MenuFlyoutItem Text="Repeat"/>
<MenuFlyoutItem Text="Shuffle"/>
</MenuFlyout>
</GridView.ContextFlyout>
</GridView>
Private Sub myGridView_RightTapped(sender As Object, e As RightTappedRoutedEventArgs) Handles myGridView.RightTapped
myGridView.SelectedItem = e.OriginalSource
End Sub
私有子myGridView_RightTapped(发送方作为对象,e作为RightTappedRoutedEventArgs)处理myGridView.RightTapped
myGridView.SelectedItem=e.OriginalSource
端接头
现在RightClick已经选择了所需的项目,可以对其执行进一步的操作,如删除、复制。我已经尝试使用RightTapped,但这并不能告诉我在GridView中选择了哪个项目。在新设计的思考方面需要建议。我的右键单击选择项目,并根据单击的类别显示不同的应用程序栏按钮,左键单击/点击导航。我可以使用哪个控件/事件来提供这两个功能。
private void categoryItemsGV_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
var tablemod = (sender as GridView).SelectedItem;
}
<GridView x:Name="myGridView" VerticalAlignment="Center">
<GridView.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Reset"/>
<MenuFlyoutSeparator/>
<MenuFlyoutItem Text="Repeat"/>
<MenuFlyoutItem Text="Shuffle"/>
</MenuFlyout>
</GridView.ContextFlyout>
</GridView>
Private Sub myGridView_RightTapped(sender As Object, e As RightTappedRoutedEventArgs) Handles myGridView.RightTapped
myGridView.SelectedItem = e.OriginalSource
End Sub