Для документации я добавлю здесь пример того, как я добился чего-то подобного. Что мне было нужно, так это всплывающее окно, охватывающее всю область содержимого родительского окна (за исключением строки заголовка), но простое центрирование диалогового окна и растягивание его содержимого не работало, потому что диалоговое окно всегда было немного смещено снизу.
Примечание о взаимодействии с пользователем: неприятно не иметь возможности перетащить / закрыть родительское окно, когда отображается диалоговое окно без полей, поэтому я бы пересмотрел его использование. Я также решил не делать этого после публикации этого ответа, но оставлю это для других.
После некоторого поиска в Google и тестирования мне наконец удалось сделать это вот так:
var dialog = new DialogWindow
{
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
работы ручного позиционирования .
Результат:
Не знаю, есть ли более простой способ сделать это, но, похоже, у меня ничего не работало.