从datagrid wpf中的textblock复制文本内容

时间:2014-12-12 06:10:33

标签: wpf datagrid wpf-controls

我需要复制wpf文本块的文本内容。 我在DataGrid中有一个文本块我需要在选择数据行时复制文本块的文本。

我的xaml代码在这里..

  <DataGrid ItemsSource="{Binding ScenarioTraceLogDetails}"  AutoGenerateColumns="False" CanUserAddRows="False" 
                                                RowHeaderWidth="0" Margin="10,0,10,10" Grid.Row="2" HorizontalAlignment="Stretch" FontSize="14">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Header="Log Description" Width="4*" MinWidth="550" IsReadOnly="True" >
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate DataType="TestAutomationClient:ScenarioTraceLogDetailWrapper">
                            <TextBlock Text="{Binding Path=LogDetail.Data}" TextWrapping="Wrap" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Type" Binding="{Binding Path=LogDetail.LogType}" CanUserResize="True" Width="120" MinWidth="120" IsReadOnly="True"/>
                    <DataGridTextColumn Header="Category" Binding="{Binding Path=LogDetail.Category}"  Width="150" MinWidth="150" IsReadOnly="True"/>
                    <DataGridTextColumn Header="Start Time" Binding="{Binding Path=LogDetail.StartTime}"  Width="150" MinWidth="150" IsReadOnly="True"/>
                    <DataGridTextColumn Header="Completion Time" Binding="{Binding Path=LogDetail.CompletionTime}"  MinWidth="150" Width="150" IsReadOnly="True"/>
                    <DataGridTextColumn Header="Duration (~ms)" Binding="{Binding Path=TimeTaken}"  Width="120" MinWidth="120" IsReadOnly="True"/>
                </DataGrid.Columns>
                <DataGrid.Resources>
                    <Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=IsError}" Value="true">
                                <Setter Property="Foreground" Value="Red" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Path=IsWarning}" Value="true">
                                <Setter Property="Foreground" Value="DarkOrange" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding Path=IsSuccessfulInformation}" Value="true">
                                <Setter Property="Foreground" Value="Green" />
                            </DataTrigger>
                        </Style.Triggers>
                        <Setter Property="ToolTip" Value="{Binding Path=ScriptDatasetInfo}" />
                        <Setter Property="ToolTipService.ShowDuration" Value="60000" />
                    </Style>
                </DataGrid.Resources>
            </DataGrid>

1 个答案:

答案 0 :(得分:1)

如果您使用的是MVVM模式,则必须在ViewModel上创建以下命令,以复制TextBox的内容:

public ICommand CopyValueCommand
        {
            get
            {
                return new CommandHandler(

                    () => 
                         // Here your Text box should bind a property of your model
                         // Copy your model property value to ClipBoard
                         Clipboard.SetText(this.SelectedElement.YourProperty));
            }
        }

然后在XAML上,使用System.Windows.Interactivity在更改DataGrid选择时调用命令:

<DataGrid ItemsSource="{Binding Path=Elements, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  SelectedItem="{Binding Path=SelectedElement, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                  >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding Path=CopyValueCommand}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
                ...
            </DataGrid.Columns>
        </DataGrid>

备注

  • 我认为你的TextBox文本绑定了模型的属性。

  • 请注意,您需要将System.Windows.Interactivity.dll引用到您的项目中。 我希望这可以帮助你!