WPF C1FlexGrid如何设置能够复制选中的单元格内的文本内容
参考C1DataGrid的实现(http://gcdn.gcpowertools.com.cn/showtopic-19390.html),却无法取到组合键Ctrl+C。请问如何在C1FlexGrid中实现选中效果还是以单行的形式,但是复制的时候是复制单击选中的单元格内容?
public RelayCommand<KeyEventArgs> GridKeyDownCopyCommand
{
get
{
return new RelayCommand<KeyEventArgs>(e =>
{
var flexgrid = e.Source as C1FlexGrid;
if (flexgrid != null && e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.C)
{
//此处断点,但一直跳不进来
}
});
}
} 回复 1楼CanYou8的帖子
我测试的是C1FlexGrid的PreviewKeyDown事件,是可以触发的。
void fg_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.C && Keyboard.Modifiers == ModifierKeys.Control)
{
//在这里添加断点,正常触发事件。
e.Handled = true;
}
} PreviewKeyDown事件可以,但不利于方法的统一维护;之前我们在C1DataGrid中是用以下方式捕捉事件的,请问这种方式在C1FlexGrid中为什么不行呢?
<c1:C1FlexGrid Name="c1FlexGrid" Grid.Row="1" AutoGenerateColumns="False" AllowAddNew="False"
Style="{StaticResource Green}" BorderThickness="1"
SelectionMode="Row" MaxRowHeight="20"
ItemsSource="{Binding List,IsAsync=True}" SelectedItem="{Binding CurrentItem,Mode=TwoWay}"
LoadedRows="c1FlexGrid_LoadedRows">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseRightButtonDown">
<command:EventToCommand PassEventArgsToCommand="True" Command="{Binding GridRightClickCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="KeyDown">
<command:EventToCommand PassEventArgsToCommand="True" Command="{Binding GridKeyDownCopyCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</c1:C1FlexGrid> 回复 3楼CanYou8的帖子
WPF平台,某些组合键不能相应KeyDown事件。还有KeyDown事件被其他主界面截获,都是有可能的。
因此可以使用PreviewKeyDown事件来替代。 PreviewKeyDown事件下,如何取到当前所选的单元格? 回复 5楼CanYou8的帖子
HitTest方法可以根据鼠标位置,取到所选单元格的信息。 回复 6楼Alice的帖子
用HitTestInfo info = c1FlexGrid.HitTest(e) 取到的行、列序号都是-1,如何取单元格?
回复 7楼CanYou8的帖子
HitTest是根据鼠标位置转换为c1flexgrid位置信息,所以应该在鼠标相关事件里去获取,而不是键盘事件。
另外,C1FlexGrid的Selection/SelectedItem/SelectIndex属性都可以拿到选择的信息,可以根据需求选择。 已实现,谢谢!!! :strong:
//键盘录入时触发命令,此命令用于修改C1FlexGrid的ctrl+c复制事件
protected void c1FlexGrid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key != Key.C || Keyboard.Modifiers != ModifierKeys.Control) return;
var grid = sender as C1FlexGrid;
if (grid != null)
{
var cr = grid.Selection;
Clipboard.SetDataObject(grid, false);
}
e.Handled = true;
} 回复 9楼CanYou8的帖子
:hjyzw:棒棒哒,赞一个。
页:
[1]
2