uwp - UWP:DataGrid、MenuFlyout 右键单击
问题描述
问题: 右键单击一行时,我试图在 DataGrid 上创建一个菜单。
目标: 右键单击一行时是否可以在DataGrid上创建菜单;我可以在单元格上创建一个吗?
<controls:DataGridTemplateColumn Header="OrderId">
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ContextFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Copy" Icon="Copy" Click="MenuFlyoutItem_Copy" />
<MenuFlyoutSeparator />
<MenuFlyoutItem Text="Delete" Icon="Delete" Click="MenuFlyoutItem_Delete" />
</MenuFlyout>
</Grid.ContextFlyout>
<TextBlock Text="{Binding OrderId}" />
</Grid>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>
private void MenuFlyoutItem_Copy(object sender, RoutedEventArgs e)
{
ObservableCollection<SampleOrder> dataGrid = DataGrid.ItemsSource as ObservableCollection<SampleOrder>;
MenuFlyoutItem mfi = sender as MenuFlyoutItem;
SampleOrder seleted = mfi.DataContext as SampleOrder;
var copiedItem = (SampleOrder)seleted.Clone();
dataGrid.Add(copiedItem);
}
private void MenuFlyoutItem_Delete(object sender, RoutedEventArgs e)
{
ObservableCollection<SampleOrder> dataGrid = DataGrid.ItemsSource as ObservableCollection<SampleOrder>;
MenuFlyoutItem mfi = sender as MenuFlyoutItem;
SampleOrder seleted = mfi.DataContext as SampleOrder;
dataGrid.Remove(seleted);
}
解决方案
除非我遗漏了什么,否则这比 Nico 的回答要容易得多。您需要做的就是RowStyle
像这样设置属性:
<controls:DataGrid.RowStyle>
<Style TargetType="controls:DataGridRow">
<Setter Property="controls:DataGridRow.ContextFlyout">
<Setter.Value>
<MenuFlyout>
<MenuFlyoutItem x:Name="MyMenuItem"
Click="MyMenuItem_Click"
Text="Do Things" />
</MenuFlyout>
</Setter.Value>
</Setter>
</Style>
</controls:DataGrid.RowStyle>
然后在你的处理程序中:
private void MyMenuItem_Click(object sender, RoutedEventArgs e)
{
var item = (sender as FrameworkElement).DataContext as MyModel;
// Do things with your item.
}
推荐阅读
- symfony-forms - 获取 symfony 5 中文本框上的实体值
- amazon-web-services - 如何在 aws AppSync 中按 createdAt 和 updatedAt 排序和过滤?
- pagespeed - Google 分析脚本是否值得删除以提高我的页面速度?
- sympy - 使用涉及 SymPy 中变量之间关系的假设简化表达式
- c# - 在循环中创建元素并定位它们,从左下角到右上角
- angular - 角度形式:如何确保选择多选按钮组中的至少一项
- r - 对于每一行,将字符分配给该行中的第一个最大值
- node.js - Express 端点不反映更改。奇怪的行为
- html - 如何在父级伪类之前修复
- postgresql - Postgresql 9.6 级联流复制问题:物理复制槽未从主服务器同步到从服务器