Дополнительный текст для сочетания клавиш Ctrl + C - PullRequest
1 голос
/ 18 июля 2011

Как и большинство MessageBox, WPF MessageBox копирует все его содержимое (заголовок, текст, кнопки) в буфер обмена, если пользователь нажимает CTRL + C, пока отображается MessageBox. Пока все хорошо.

Теперь я хотел бы предоставить дополнительную информацию, но только в буфер обмена, а не в сам MessageBox. Кто-нибудь знает, как бы я это сделал?

System.Windows.MessageBox.Show(this, "The Message", "MsgBox Caption", MessageBoxButton.OK, MessageBoxImage.Information);

Ответы [ 3 ]

1 голос
/ 18 июля 2011

из: http://msdn.microsoft.com/en-us/magazine/cc188920.aspx

Замена статического текста Сообщение диалогового окна отображается через окно статического класса.Аналогом .NET Framework статического окна Win32 является класс Label.Текст, отображаемый через статическое окно управления, нельзя выделить мышью.Чтобы частично исправить это поведение, в Windows 2000 корпорация Microsoft представила малоизвестную функцию, упрощающую задачу копирования текста, отображаемого в стандартном окне сообщения, в буфер обмена.Попробуйте нажать Ctrl + C, когда появится окно сообщения.Затем сбросьте содержимое буфера обмена в элемент управления текстового поля с помощью Ctrl-V.Для примера окна, показанного на рисунке 1, вы получите следующий текст:

————————————

Режущая кромка

—————————————

Здравствуйте, управляемый мир!

—————————————

ОК

—————————————

Текст содержит сообщение вместе с заголовком окна и текстом кнопки.Эта функция зависит от операционной системы и не может управляться программно.Если вы хотите визуально выделить текст, который нужно скопировать в буфер обмена, нет другого способа, кроме как заменить статический элемент управления на элемент управления для редактирования без полей только для чтения.

Таким образом, в основном вы должны создать свойсобственный элемент управления окном сообщений для управления отправкой текста в буфер обмена.

1 голос
/ 18 июля 2011

Конечно! Просто добавьте любой текст, который хотите скопировать в окно сообщения!

Нет веских причин для того, чтобы хотеть сделать это любым другим способом. И даже если бы были, это невозможно. Это не то, что реализовано в WPF; Win32 MessageBox API делает это внутренне. Там нет кнопки или переключатель, чтобы настроить, как это работает.

Другие предложили создать собственную форму окна сообщения и попытаться смоделировать это поведение, но я бы очень посоветовал против этого. Очень трудно понять все мелочи, которые API MessageBox на самом деле делает для вас за кулисами.

Лучшим решением является обновление до API TaskDialog и добавление кнопки «Дополнительная информация» в диалоговое окно, раскрывающее панель с дополнительной информацией о сообщении. Пользователи уже знакомы с этим стилем диалога, так как он используется внутри текущих версий операционной системы. Чем меньше вы отклоняетесь от соглашений вашей платформы, тем счастливее будут ваши пользователи.

0 голосов
/ 18 июля 2011

По моему мнению, вы не можете изменить содержимое в буфере обмена, но вы можете просто изменить содержимое до его копирования, вызвав комбинацию клавиш.

РЕДАКТИРОВАТЬ:

См. Нижепример:

// 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(); 
} 
}
...