Размер функции MessageBox

каким образом .Сети MessageBox определить его размер относительно разрешения экрана на котором он отображается?

я пишу немного более гибкое диалоговое окно для приложения WPF. Макет окна выложен в виде сетки:

+-----------------
| auto: Header      // A header for the dialog.
+-----------------
| auto: Content     // can be any FrameworkElement.
+-----------------
| auto: BottomPanel // With buttons <OK>, <Cancel>, <Delete>, etc. 
+-----------------

на Contentячейка может быть очень большой. В одном из моих случаев использования пользователь хочет удалить x элементы из списка. Элементы отображаются в диалоговом окне подтверждения. Если их много (скажем, 50+) элементов, окно может стать большим-слишком большим на мой вкус.

то, что я хотел бы, это функция, которая определяет MaxHeightи MaxWidthсвойства диалогового окна с текущего экрана таким образом, что имитирует собственныйMessageBoxдиалог.

PS: Я вызываю диалоговое окно сообщения со следующим static способ:

// MessageDialog class
public static object Show(
        Window owner, 
        FrameworkElement content,
        string title,
        string header,
        params MessageDialogButton[] buttons
        );
/* The MessageDialogButton class has the following properties: 
 * Text, ReturnValue, IsDefault, IsCancel. The class produces 
 * System.Windows.Controls.Button objects that when clicked 
 * return the value of their ReturnValue property--which is then
 * returned by MessageDialog::Show(...)
 */

PPS: чтобы определить экран, на котором будет отображаться диалоговое окно, экран, на котором MessageDialog окна есть. В качестве резервного используется первый (основной) экран.

1 ответов


вы не найдете ничего подобного документально, однако согласно Рэймонду в Windows Vista алгоритм окна сообщения определил ширину окна сообщения, выбрав наименьшее из следующего, что привело к коробке, которая подходит в рабочей области:

  • ширина самой длинной линии
  • 278 DLU (диалогового окна)
  • 5/8 ширины рабочей зоны
  • 3/4 ширины рабочая зона
  • 7/8 ширины рабочей зоны

(я вставил это, чтобы означать, что (например) ширина будет 5/8th ширины рабочей области, если это не приведет к диалогу, который выше высоты рабочей области, в этом случае он будет использовать более широкую ширину).

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

насколько мне известно, сообщение коробка не имеет максимальной высоты, но я думаю, что аналогичный алгоритм будет работать хорошо.

Если ваш диалог действительно очень большой, то вы можете рассмотреть возможность просто сделать диалог изменяемым / максимизируемым. (Я не поклонник диалогов, которые отображают слишком большие списки, но не позволяют изменять размер диалога до более подходящего размера).