CanYou8 发表于 2016-2-16 10:18:00

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 &amp;&amp; e.KeyboardDevice.Modifiers == ModifierKeys.Control &amp;&amp; e.Key == Key.C)
                  {
                           //此处断点,但一直跳不进来
                  }
                });
            }
      }

Alice 发表于 2016-2-16 11:18:00

回复 1楼CanYou8的帖子

我测试的是C1FlexGrid的PreviewKeyDown事件,是可以触发的。
void fg_PreviewKeyDown(object sender, KeyEventArgs e)
      {
            if (e.Key == Key.C &amp;&amp; Keyboard.Modifiers == ModifierKeys.Control)
            {
//在这里添加断点,正常触发事件。
                e.Handled = true;
            }
      }

CanYou8 发表于 2016-2-16 11:41:00

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>

Alice 发表于 2016-2-16 17:30:00

回复 3楼CanYou8的帖子

WPF平台,某些组合键不能相应KeyDown事件。还有KeyDown事件被其他主界面截获,都是有可能的。
因此可以使用PreviewKeyDown事件来替代。

CanYou8 发表于 2016-2-17 11:51:00

PreviewKeyDown事件下,如何取到当前所选的单元格?

Alice 发表于 2016-2-17 13:41:00

回复 5楼CanYou8的帖子

HitTest方法可以根据鼠标位置,取到所选单元格的信息。

CanYou8 发表于 2016-2-17 14:11:00

回复 6楼Alice的帖子

用HitTestInfo info = c1FlexGrid.HitTest(e) 取到的行、列序号都是-1,如何取单元格?

Alice 发表于 2016-2-17 14:55:00

回复 7楼CanYou8的帖子

HitTest是根据鼠标位置转换为c1flexgrid位置信息,所以应该在鼠标相关事件里去获取,而不是键盘事件。

另外,C1FlexGrid的Selection/SelectedItem/SelectIndex属性都可以拿到选择的信息,可以根据需求选择。

CanYou8 发表于 2016-2-19 11:04:00

已实现,谢谢!!! :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;
      }

Alice 发表于 2016-2-19 11:47:00

回复 9楼CanYou8的帖子

:hjyzw:棒棒哒,赞一个。
页: [1] 2
查看完整版本: WPF C1FlexGrid如何设置能够复制选中的单元格内的文本内容