TL; DR
Кажется, установка AllowTransparency
на True
смещает окно вверх и влево на 8 пикселей при максимизации, мне нужно вернуть его на экран.
Углубленный
Похоже, я где-то совершаю ошибку, но не знаю почему. Я не могу опубликовать весь код, но постараюсь написать здесь все, что уместно.
У меня есть главное окно с настраиваемой строкой заголовка. Это означает, что я должен был установить WindowsStyle
на None
, и я также использовал шаблон. С самого начала у меня были проблемы с тем, что окно было намного больше, чем мой рабочий стол, хотя и было максимально развернуто. На ВСЕХ СТОРОНАХ было 8 пикселей от экрана. Я отказался от шаблона и попытался изменить существующее окно в соответствии со своими потребностями. Установив AllowTransparency
обратно на false
, мне удалось избавиться от утечки по бокам. Проблема, которая затем возникла, это граница в верхней части окна, которую я удалил, установив для CaptionHeight
из WindowChrome
значение 0.
Хорошо, утечка исчезла. Но я считаю, что моя текущая проблема связана с тем, что я написал выше. То есть я не могу привязать ширину и высоту к чему-либо, подходящего свойства нет. Это то, что я пробовал с SystemParameters
:
SystemParameters.FullPrimaryScreenHeight;
SystemParameters.FullPrimaryScreenWidth;
SystemParameters.MaximizedPrimaryScreenHeight;
SystemParameters.MaximizedPrimaryScreenWidth;
SystemParameters.PrimaryScreenHeight;
SystemParameters.PrimaryScreenWidth;
SystemParameters.WorkArea.Height;
SystemParameters.WorkArea.Width;
SystemParameters.VirtualScreenWidth;
Требуемая фактическая высота (1048) находится где-то между SystemParameters.WorkArea.Height
(1040) и SystemParameters.MaximizedPrimaryScreenHeight
(1056).
А требуемая фактическая ширина (1928) находится где-то между SystemParameters.WorkArea.Width
(1920) и SystemParameters.MaximizedPrimaryScreenWidth
(1936).
Вы можете увидеть образец здесь.
- MaximizedPrimaryScreenWidth и MaximizedPrimaryScreenHeight больше на 8 пикселей по сравнению с тем, что мне нужно
- WorkArea.Width и WorkArea.Height меньше на 8 пикселей по сравнению с тем, что мне нужно
- У меня была утечка со всех сторон до 8 пикселей
Это мой код окна
<Window x:Class="MyApp.MainWindow"
...
WindowState="Normal"
ResizeMode="CanResizeWithGrip"
MaxHeight="{Binding SystemParameters.WorkArea.Height}"
WindowStyle="None">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="0"/>
</WindowChrome.WindowChrome>
....content....
</Window>
Что также не работает:
- Window.Padding
- Window.Margin
- Window.Top
- WindowStyle="SingleBorderWindow"
Что я имею, но не хочу
XAML:
MaxWidth="{Binding MaximumWidth}"
C#
public double MaximumWidth
{
get
{
// I don't want anything hard-coded.
// Some other (correct) parameter would be fine as well,
// if we can't get the window on screen.
return SystemParameters.WorkArea.Width + 8;
}
}
Обновление: SingleBorderWindow
Вот что происходит при использовании WindowStyle="SingleBorderWindow"
.
Итак, мое окно не только на 8 пикселей короче правого и нижнего краев (при привязке к WorkArea), но вы можете видеть фактическое окно сзади, а кнопки доступны для нажатия (даже там, где они не видны). Очень странно. Как будто есть два окна, но только то, что мне нужно, не в нужном месте.