我需要复制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>
答案 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引用到您的项目中。 我希望这可以帮助你!