2017-06-06 301 views
1

的功能,我有一个WPF DataGrid中有一列:覆盖复制过去一个WPF网格视图

<DataGrid Name="myGRID"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="myHeader Binding="{Binding myObservableCollection}"> 
      <DataGridTextColumn.HeaderStyle> 
       <Style TargetType="DataGridColumnHeader"> 
        <Setter Property="HorizontalContentAlignment" Value="Center" /> 
       </Style> 
      </DataGridTextColumn.HeaderStyle> 
      <DataGridTextColumn.ElementStyle> 
       <Style TargetType="TextBlock"> 
        <Setter Property="HorizontalAlignment" Value="Center" /> 
       </Style> 
      </DataGridTextColumn.ElementStyle> 
      <DataGridTextColumn.EditingElementStyle> 
       <Style TargetType="{x:Type TextBox}"> 
        <EventSetter Event="TextChanged" Handler="tbx_ConcernEnter_TextChanged"/> 
       </Style> 
      </DataGridTextColumn.EditingElementStyle> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 

现在我要重写行的粘贴功能。 当我使用:

<DataGrid> 
<CommandBinding Command="Paste" Executed="CommandBinding_Executed"/> 
</DataGrid> 

这似乎是整个GridView的,但不是为特定的行覆盖。

你知道如何覆盖它吗?

+0

特定行?你的意思是一个特定的列吗? – mm8

+0

不,我想单击到我的gridview的特定行并说“过去”为例。这应该在我的代码隐藏中调用一个函数 –

+0

这应该发生在你点击任何*行然后,对吗?这和“这似乎是整个GridView的覆盖而不是特定的行”有什么区别? – mm8

回答

3

TextBoxCellEditingTemplate“吞下”粘贴命令。但是你可以处理Loaded事件为TextBox和挂钩一个Pasting事件处理它:

<DataGridTextColumn.EditingElementStyle> 
    <Style TargetType="{x:Type TextBox}"> 
     <EventSetter Event="TextChanged" Handler="tbx_ConcernEnter_TextChanged"/> 
     <EventSetter Event="Loaded" Handler="TextBox_Loaded" /> 
    </Style> 
</DataGridTextColumn.EditingElementStyle> 

private void TextBox_Loaded(object sender, RoutedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    DataObject.AddPastingHandler(textBox, OnPaste); 
} 

private void OnPaste(object sender, DataObjectPastingEventArgs e) 
{ 
    //paste detected... 
} 
+0

它有效。非常感谢mm8,耐心等待! –