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