Tomaž Štih
-лучше поздно, чем никогда.-
Из вашего фрагмента кода я предполагаю, что вы создали свое собственное пользовательское окно. Прежде всего: если вы используете AllowsTransparency, ваше окно не сможет отображать какие-либо элементы управления старого стиля (например, веб-браузер). К сожалению, без этого окно не будет привязываться к экрану.
Отложив это в сторону, то, что я сделал, чтобы правильно максимизировать, - это
1. Добавить максимизировать/восстановить поведения на МАКС/кнопку Восстановить окно. Это поведение просто запускает команду maximize/restore.
2. В моем XAML-код всю логику окно находится внутри границы. Подобный этому...
<Border x:Name="PART_WindowBorder">
<!-- window def. here -->
</Border>
3. Моя команда максимизации/восстановления выглядит следующим образом.
public void Execute(object parameter)
{
var window = parameter as Window;
if (window != null)
{
// Get border part.
Border border = window.Template.FindName("PART_WindowBorder", window) as Border;
// Fix border margin with maximizing (WPF bug)...
if (window.WindowState == WindowState.Maximized)
{
border.Margin = new Thickness(0);
window.WindowState = WindowState.Normal;
}
else
{
border.Margin = new Thickness(6);
window.WindowState = WindowState.Maximized;
}
}
}
Поэтому вы просто увеличиваете маржу до 6 при максимальном увеличении (смещение равно 7, Моя граница равна 1). Здесь вы также можете проверить правильность версии окна и прочитать маржу с помощью GetSystemMetrics.
С уважением,
Томаз