我的应用程序中有一个简单的按钮:
<Button Content="{Binding ViewModel.Name}" Command="{Binding ViewModel.Command}" MinWidth="50">
</Button>
我希望当您在按钮上单击鼠标右键时,按钮内的内容(文本)将被复制到剪贴板中。
我们能做到吗?
提前致谢
我的应用程序中有一个简单的按钮:
<Button Content="{Binding ViewModel.Name}" Command="{Binding ViewModel.Command}" MinWidth="50">
</Button>
我希望当您在按钮上单击鼠标右键时,按钮内的内容(文本)将被复制到剪贴板中。
我们能做到吗?
提前致谢
首先获取按钮内容,
string contntText = btnName.Content.ToString();
然后将文本设置到剪贴板,
System.Windows.Forms.Clipboard.SetText(contntText);
将您的按钮更改为:
<Button Content="{Binding ViewModel.Name}" Command="{Binding ViewModel.Command}" MinWidth="50">
<Button.InputBindings>
<MouseBinding Gesture="RightClick" Command="ViewModel.CopyToClipboard" />
</Button.InputBindings>
</Button>
在您ViewModel
定义以下方法:
public void copyToClipboard()
{
System.Windows.Clipboard.SetData(DataFormats.Text, (Object)this.Name);
}
然后将copyToClipboard
方法分配给CopyToClipboard
命令。
您可以使用交互将按钮上的 MouseRightButtonUp 事件绑定到视图模型上的命令。您可以在其中找到的互动
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseRightButtonUp">
<i:InvokeCommandAction Command="{Binding CopyButtonText}" />
</i:EventTrigger>
</i:Interaction.Triggers>
您必须导入交互命名空间:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Window.Interactivity 命名空间有EventTrigger 和InvokeCommandAction。
在 copybuttonTest 命令处理程序中,您可以执行
System.Windows.Clipboard.SetData(DataFormats.Text, Name);