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

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

Пример (100%):

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

UC в уменьшенном масштабе (70%):

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

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


person Peter Stegnar    schedule 13.09.2009    source источник


Ответы (3)


Вы можете попробовать элемент управления 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>

person Milan Nankov    schedule 13.09.2009
comment
Здорово! Это именно то, что мне нужно. - person Peter Stegnar; 13.09.2009

вы можете поместить весь контейнер в ViewBox

<Viewbox StretchDirection="Both" Stretch="Uniform">
  <Grid>...</Grid>
</Viewbox>

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

person eon    schedule 30.03.2012

Использование Viewbox (как сказал Милан Нанков) — отличная идея. Я должен предупредить вас, что он также увеличивает или уменьшает другие визуальные аспекты.

Например, текстовое поле размером 200 X 1000 сильно отличается от текстового поля размером 20 X 100, увеличенного в 10 раз.

WPF предоставляет множество вариантов компоновки, которые могут изменять размеры элементов управления в зависимости от размера контейнера. Но это не меняет размер текста. Viewbox преодолевает эту проблему, но вводит другую проблему. Посмотрите на изображение ниже, на котором показано одно и то же текстовое поле в окне просмотра до и после масштабирования.

Артефакты, возникающие при использовании окна просмотра

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

Другой трюк может состоять в том, чтобы привязать высоту элемента управления к размеру шрифта. В этом случае нам понадобится преобразователь. Пожалуйста, обратитесь к этому ответу.. Изменить размер шрифта в TextBox в сетке

person Trainee4Life    schedule 13.09.2009