WPF, Проблемы 125% масштабирования Windows

Здравствуйте.
Делаю програмку на wpf. Места на форме достаточно мало а кнопки задумано сделать крупными. Вроде все составил все ок. Приходит сообщ от заказчика что половина программы не видно. Я в непонятках лезу на его комп и обнаруживаю что на винде 10 автоматом выставляется масштаб элементов в 125%.
В итоге куча всего оказалась за границами экрана.

Так вот вопрос. Можно ли каким либо способом отказаться внутри приложения от изменения масштаба?? Так то у меня семерка а тут по умолчанию 100% и все под этот масштаб настроено.

Скрин софта показать запрещено. Поэтому только на словах можно описывать. ))

ОС тут не причем, везде 125% (и выше) можно выставить, разве что качество масштабирования может отличаться. Разве что может быть для некоторых HiDPI экранов может само выставить.

Как-то так вроде бы можно:

Но тогда ж заказчику плохо видно будет, а на каком-нибудь 4K лаптопе вообще ничего не разглядит ) (там 150-200% обычно, а то и выше если экран совсем маленький)

В WPF по идее должно работать без особых проблем (по крайней мере если не ограничивать жестко размеры всего, использовать Layout’ы), это во всяких Дельфи 7 куча сложностей.

Да вот должно … Но эта автомасштабирование какое то зло …

Так а что делать то??

Вот нашел от МС решение: Но оно не работает.
Сделал по инструкции но получаю ошибку базовых классов.

Разрабатывать с учетом масштабирования.
В современных фреймворках типа WPF обычно нет особых проблем с этим, только если делать что-то сильно нестандартное или задавать размеры/позиции в пикселях вместо использования Layout’ов и т.п. (и то там вроде бы в основном по умолчанию Device-Independent Units, а не пиксели). Разве что размеры иконок надо учитывать, чтоб не были размытыми при масштабировании.

В XAML тоже поменять надо.

Но это вроде бы не нужно если не надо поддерживать еще и случаи когда разные мониторы с разным масштабированием на одном устройстве.

Да поменял.
Говорит что “System.Windows.Markup.XamlParseException: “Метод или операция не реализована.””

WpfApp1.7z (39.5 КБ)

Может быть из-за вин7? У меня запустилось.

И еще там пишут:

This page covers legacy WPF development for Windows 8.1. If you are developing WPF applications for Windows 10, please see the latest documentation on GitHub.

Но как я говорю

Вот обычное WPF + .NET 4.0 приложение, нормально масштабируется с 175%. Даже не использовал нормально Grid и т.п., а тупо мышкой расставил.

Так вот именно что без гридов.
А у меня тут гридов полно. Они и начинают плясать.
Если выставлять размеры строк как auto то все нормально но при больших компонентах части кнопок пропадают. Если выставить по частям типа 1* то вроде нормально но он все пустое место заполняет и вытягивает компоненты по всей ширине.

По идее надо чтобы пока места много и все элементы умещаются то использовалось auto а если элементы перестают вмещаться то применялось 1*

Ну я о том, что “Per monitor DPI awareness” не эту проблему решает )

Так а зачем пустое место оставлять?
А про вытягиваемость самого содержимого это наверно надо в компоненте настраивать/ограничивать если это свой сложный компонент.

Потому что некрасиво когда кнопки висят в воздухе.

Уходит за границы в ширину или по высоте? По высоте в приложение можно в общий контейнер скроллинг добавить.

Не понятно что есть - висят в воздухе.
По скринам: слева все как-бы хорошо, справа избыток свободного места в контейнере с элементами(компонентами). Так это должно настраиваться в свойствах контейнера и самих элементов(компонентов). Имею ввиду масштабирование и скроллинг при необходимости.

P. S.
Здесь скорей всего нужно смотреть в строну выравнивания компонента в контейнере корректировкой свойств компонента.

Да уже исковырял все что нашел. Если стэкпанель то там всегда масштабирование авто стоит. Если таблица то только так как на экране … Сам не нашел нужную пропертю. ))) Если кто знает прошу ткнуть пальцем.

Проблема в том, что при Auto кнопки не помещаются когда слишком маленький размер окна?

В Qt это вроде бы легко решалось с помощью Spacer’a (сделать строки как *, и в конец кинуть Spacer, чтоб он сдвигал вверх пока есть место).

хз есть ли в WPF простое решение, но наверно можно накрутить что-нибудь с помощью биндинга к ActualHeight окна и т.п.

Так а если копонентам, после размещения их всех в контейнере, задать свойсво - занять все пространство? Друг в друга будут упираться занимая все пространство в контейнере.

P. S.
В какой среде ведется разработка?

Так это вроде и есть настройка ширины в виде 1*.

Visual Studio WPF

Это работает если сделать значения строк как auto а один любой как 1* тогда этот один расширяеься до любых размеров. Но авто размер это значит по размеру контента. А в таком случае они обрезаются если форма станет меньше.

Тут наверно речь о том, чтобы сами кнопки всегда были на всю высоту строки.

Ну они должны занимать равномерное пространство. Но цель чтобы сжималось если не влазит.

Но в целом ладно … то ли я чего то не правильно думаю то ли что… наверное нет смысла настоллько заморачиваться …