DevExpress TableView Cell确实关注CopyingToClipboard事件

时间:2014-08-19 23:13:30

标签: c# wpf devexpress devexpress-wpf

我正在尝试修复这个自定义的DevExpress TableView。正如您猜测以下方法处理CopyingToClipboard。当我投射FocusedElement时,它是一个BaseEdit但不是我精确选择的那个。它的DisplayText是不同的。

我已经更改了单元格的背景颜色,以确保它具有焦点,并且它是所选择的焦点。这不是问题。请你分享一下你的智慧。

private void CustomizedTableView_CopyingToClipboard(object sender, CopyingToClipboardEventArgs e)
    {
        TableView view = sender as TableView;

        if (view == null || view.Grid == null)
        {
            return;
        }

        BaseEdit edit = System.Windows.Input.Keyboard.FocusedElement as BaseEdit;
        edit.Background = Brushes.Red;
        VantageUtilities.SafeCopyToClipboard(DataFormats.Text, edit.DisplayText);
        e.Handled = true;            
    }

1 个答案:

答案 0 :(得分:1)

您可以使用DataViewBase.ActiveEditor属性获取焦点编辑器,也可以使用DataControlBase.CurrentCellValue属性获取焦点值。
这是一个例子:

private void CustomizedTableView_CopyingToClipboard(object sender, CopyingToClipboardEventArgs e)
{
    TableView view = sender as TableView;

    if (view == null || view.Grid == null)
        return;

    string text = null;

    if (view.ActiveEditor != null)
        text = view.ActiveEditor.DisplayText;
    else
    {
        object value = view.Grid.CurrentCellValue;

        if (value != null)
            text = value.ToString();
    }

    if (text == null)
        return;

    VantageUtilities.SafeCopyToClipboard(DataFormats.Text, text);
    e.Handled = true;
}

PS:CopySomethingToClipboard类中有DataControlBase个方法:DataControlBase.CopyCurrentItemToClipboard方法,DataControlBase.CopyRangeToClipboard方法,DataControlBase.CopyRowsToClipboard方法,DataControlBase.CopySelectedItemsToClipboard方法和DataControlBase.CopyToClipboard方法。你可以看看它。