与大多数MessageBox一样,如果用户在显示MessageBox时按下CTRL + C,WPF MessageBox会将其所有内容(标题,文本,按钮)复制到剪贴板。到目前为止一切都很好。
现在我想提供其他信息,但仅提供给剪贴板,而不是MessageBox本身。有谁知道我会怎么做?
System.Windows.MessageBox.Show(this, "The Message", "MsgBox Caption", MessageBoxButton.OK, MessageBoxImage.Information);
答案 0 :(得分:1)
来自:http://msdn.microsoft.com/en-us/magazine/cc188920.aspx
替换静态文本呈现对话框的消息 通过静态类的窗口。 .NET Framework对应物 一个Win32静态窗口是Label类。显示的文字 通过静态控制窗口不能用鼠标选择。至 部分解决了这种行为,使用Windows 2000,Microsoft 介绍了一个鲜为人知的功能,以简化复制任务 文本显示在标准消息框中的剪贴板。尝试 显示消息框窗口时按Ctrl + C.接下来,冲洗 使用Ctrl-V将剪贴板的内容添加到文本框控件中。为了 示例窗口如图1所示,您将得到以下文本:
-------------
前沿
-------------
您好,托管世界!
-------------
好的
-------------
该文本包含消息以及窗口标题和 按钮文字。该功能取决于操作系统,不能 以编程方式控制。如果要在视觉上选择文本 要复制到剪贴板,除了替换之外别无他法 带有无边框只读编辑控件的静态控件。
所以基本上你必须创建自己的消息框控件来控制文本发送到clipbord的方式。
答案 1 :(得分:1)
当然!只需将要复制的任何文本添加到消息框中即可!
没有任何理由想要以任何其他方式这样做。即使有,也不可能。这不是WPF中实现的; Win32 MessageBox
API在内部执行。没有按钮或开关来配置它的工作原理。
其他人建议创建自己的消息框表单并尝试模拟这种行为,但我非常反对这一点。很难找到MessageBox
API在幕后为您实际做的所有小事情。
更好的解决方案是升级到TaskDialog
API,并在对话框中添加“更多信息”按钮,该对话框会显示一个面板,显示有关该消息的其他信息。用户已经熟悉这种对话框,因为它在操作系统的当前版本内部使用。您偏离平台惯例的次数越少,您的用户就会越快乐。
答案 2 :(得分:-1)
在我看来,您无法更改剪贴板中的内容,但您可以通过触发组合键来更改复制前的内容。
编辑:
见下面的例子:
// Ctrl + C
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.C)) {
ProcessSaveCommand();
}
您必须将keydown事件绑定到您的元素,并且可以处理如上所示的数据。
<TextBox KeyDown="KeyDownEventHandler" />
private void KeyDownEventHandler(object sender, KeyEventArgs e)
{
// Ctrl + C
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.C)) {
ProcessSaveCommand();
}
}