您可以通过将
TextBox
指定为 CommandTarget
来做到这一点。
获取或设置引发指定命令的元素。
您可以使用
TextBox
绑定语法绑定 ElementName
。
<StackPanel>
<TextBox x:Name="MyTextBox"/>
<Button
Name="BtnCopyToClipboard"
Command="ApplicationCommands.Copy"
CommandTarget="{Binding ElementName=MyTextBox}"
Content="Copy"/>
</StackPanel>
请注意,这只会复制selected 文本。如果您想将所有文本复制到剪贴板而不考虑选择,您将需要在代码隐藏中使用事件处理程序或编写自定义附加行为。
<Button
x:Name="BtnCopyToClipboard"
Click="CopyAllTextToClipboard"
Content="Copy"/>
private void CopyAllTextToClipboard(object sender, RoutedEventArgs e)
{
Clipboard.SetText(MyTextBox.Text);
}
另一种方法是覆盖
Copy
命令的默认命令绑定。这提供了指定启用和禁用按钮的 can execute 处理程序的优势。
<StackPanel>
<TextBox x:Name="MyTextBox">
<TextBox.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="Copy_Executed" CanExecute="Copy_CanExecute"/>
</TextBox.CommandBindings>
</TextBox>
<Button
Name="BtnCopyToClipboard"
Command="ApplicationCommands.Copy"
CommandTarget="{Binding ElementName=MyTextBox}"
Content="Copy"/>
</StackPanel>
private void Copy_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = !string.IsNullOrEmpty(MyTextBox.Text);
}
private void Copy_Executed(object sender, ExecutedRoutedEventArgs e)
{
Clipboard.SetText(MyTextBox.Text);
}