来自datagridtemplatecolumn的Xaml复制文本

时间:2017-09-14 07:45:39

标签: xaml

我有以下代码:

 <DataGridTemplateColumn  Width="Auto" Header="Čas registrace" SortMemberPath="ECreationTime">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" Margin="5,0,5,0" >
                                    <StackPanel>
                                        <TextBlock Focusable="True" HorizontalAlignment="Left"  Text="{Binding Path=ECreationTime,StringFormat=\{0:dd.MM.yy\}, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
                                    </StackPanel>
                                    <StackPanel>
                                        <TextBlock Focusable="True" Width="10"></TextBlock>
                                    </StackPanel>
                                    <StackPanel>
                                        <TextBlock Focusable="True" HorizontalAlignment="Right" Foreground="Crimson" Text="{Binding Path=ECreationTime,StringFormat=\{0:HH:mm:ss\}, UpdateSourceTrigger=PropertyChanged}" FontWeight="Bold"></TextBlock>
                                    </StackPanel>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

我在datagrid中有更多列。当有人想要复制完整行时 - 确定,但只有这个特定的列不可能复制。我认为这是由于堆叠面板和多个文本框。但我需要保持这种方式。因为格式和颜色。任何想法如何解决这个问题?我真的想要从这个专栏中复制。感谢。

1 个答案:

答案 0 :(得分:2)

在您的情况下,我认为您应该实现自己的复制,请查看以下示例:

模板

<DataGrid Name="DataGrid" ItemsSource="{Binding People}" ClipboardCopyMode="None" AutoGenerateColumns="False"   SelectionMode="Extended" SelectionUnit="FullRow">
    <DataGrid.CommandBindings>
        <CommandBinding Command="Copy" Executed="CopyCommand" />
    </DataGrid.CommandBindings>
    <DataGrid.InputBindings>
        <KeyBinding Key="C" Modifiers="Control" Command="Copy" />
    </DataGrid.InputBindings>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Id}" Header="Id" />
        <DataGridTemplateColumn Header="FullName" >
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <WrapPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding FirstName}" Margin="0,0,10,0" />
                        <TextBlock Text="{Binding LastName}" />
                    </WrapPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Binding="{Binding Age}" Header="Age" />
    </DataGrid.Columns>
</DataGrid>

代码隐藏

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
    private void CopyCommand(object sender, ExecutedRoutedEventArgs e)
    {
        var person = DataGrid.SelectedItem as Person;
        Clipboard.SetText($"{person.Id}\t{person.FirstName}\t{person.LastName}\t{person.Age}");
    }
}

当你定位接受纯文本时,这是非常简单的,如果不是,你应该尝试使用其他剪贴板方法并适应你的目标数据格式(JSON,XML,Binary,Html)