Как относительный масштаб размера пользовательского контроля?
Как относительный размер масштаба пользовательского элемента управления, как изображение (в редакторе изображений).
Пример (100%):
(источник: stegnar.com)
Сокращенный UC (70%):
(источник: stegnar.com)
Ну, я достигаю этого в графическом редакторе, но я бы хотел в WPF. :) Мне нужно это, чтобы настроить мое приложение на другое разрешение экрана, при этом ничего не скрывая (без полос прокрутки).
Ответы
Ответ 1
Вы можете попробовать элемент управления ViewBox, который масштабирует вверх/вниз его содержимое, чтобы он заполнил доступное пространство.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1">
<Grid>
<Viewbox StretchDirection="Both" Stretch="Uniform">
<local:UserControl1 Height="600" Width="600"/>
</Viewbox>
</Grid>
Ответ 2
Использование Viewbox (по словам Милана Нанкова) - отличная идея. Одна вещь, которую я должен предупредить вас, это то, что она также увеличивает или уменьшает другие визуальные аспекты.
Например, текстовое поле размером 200 X 1000 сильно отличается от текстового поля размером 20 X 100, увеличенным в 10 раз.
WPF предоставляет множество параметров компоновки, которые могут изменять размер элементов управления в соответствии с размером контейнера. Но это не меняет размер текста. Viewbox преодолевает эту проблему, но она вводит еще одну проблему. Проверьте изображение ниже, которое показывает то же текстовое поле в окне просмотра до и после масштабирования.
![Artifacts introduced by the use of viewbox]()
Один трюк, который можно использовать, - разместить каждый текстовый блок в окне просмотра. Но я думаю, что это было бы излишним, и я серьезно не поддерживаю этот трюк. Пожалуйста, проверьте сами и ответьте, практично это или нет.
Другим трюком может быть привязка высоты элемента управления к размеру шрифта. В этом случае нам понадобится конвертер. См. Этот ответ.. Изменить размер шрифта в TextBox в сетке
Ответ 3
вы можете поместить весь контейнер в ViewBox
<Viewbox StretchDirection="Both" Stretch="Uniform">
<Grid>...</Grid>
</Viewbox>
вам не нужно размещать в нем каждый текстовый блок!