Подтвердить что ты не робот

Как относительный масштаб размера пользовательского контроля?

Как относительный размер масштаба пользовательского элемента управления, как изображение (в редакторе изображений).

Пример (100%):

alt text
(источник: stegnar.com)

Сокращенный UC (70%):

alt text
(источник: stegnar.com)

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

4b9b3361

Ответ 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>

вам не нужно размещать в нем каждый текстовый блок!