Ради документации я добавлю здесь пример того, как я добился чего-то подобного. Мне нужно было всплывающее окно, охватывающее всю область содержимого родительского окна (исключая строку заголовка), но простое центрирование диалога и растяжение его содержимого не работали, потому что диалог всегда был немного смещен снизу.
Примечание об опыте пользователя: Неприятно не иметь возможности перетаскивать / закрывать родительское окно, когда отображается диалоговое окно без полей, поэтому я бы пересмотрел его использование. Я также решил не делать этого после публикации этого ответа, но оставлю это на усмотрение других.
После некоторого поиска в Google и тестирования мне наконец удалось сделать это так:
var dialog = new DialogWindow
{
//this = MainWindow
Owner = this
};
dialog.WindowStartupLocation = WindowStartupLocation.Manual;
dialog.WindowStyle = WindowStyle.None;
dialog.ShowInTaskbar = false;
dialog.ResizeMode = ResizeMode.NoResize;
dialog.AllowsTransparency = true;
var ownerContent = (FrameworkElement) Content;
dialog.MaxWidth = ownerContent.ActualWidth;
dialog.Width = ownerContent.ActualWidth;
dialog.MaxHeight = ownerContent.ActualHeight;
dialog.Height = ownerContent.ActualHeight;
var contentPoints = ownerContent.PointToScreen(new Point(0, 0));
dialog.Left = contentPoints.X;
dialog.Top = contentPoints.Y;
dialog.ShowDialog();
DialogWindow
является окном, и его владельцем установлено главное окно приложения. WindowStartupLocation
должен быть установлен на Manual
для ручного позиционирования.
Результат:
Я не знаю, есть ли более простой способ сделать это, но больше ничего мне не помогло.