Задля документації я додаю тут приклад того, як я досяг чогось подібного. Мені потрібно було спливаюче вікно, яке охоплювало всю батьківську область вмісту Вікна (за винятком рядка заголовка), але просто центрирувати діалогове вікно та розтягувати його вміст не працювало, оскільки діалогове вікно завжди було трохи зміщене знизу.
Примітка щодо взаємодії з користувачем: Неприємно не перетягувати / закривати батьківське вікно, коли відображається діалогове вікно без полів, тому я б подумав про його використання. Я також вирішив не робити цього після публікації цієї відповіді, але залишу це для інших.
Після деяких пошуків і тестування мені нарешті вдалося зробити це так:
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
для ручного позиціонування до роботи.
Результат:
Не знаю, чи є простіший спосіб зробити це, але, здавалося б, ніщо інше не спрацювало для мене.