单击按钮时将文本框文本复制到剪贴板,无需隐藏代码

问题描述 投票:0回答:1
c# wpf xaml
1个回答
3
投票

您可以通过将

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.