Как относительный размер масштаба пользовательского контроля? - PullRequest
21 голосов
/ 13 сентября 2009

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

Пример (100%):

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

Уменьшенный UC (70%):

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

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

Ответы [ 3 ]

30 голосов
/ 13 сентября 2009

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

5 голосов
/ 31 марта 2012

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

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

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

5 голосов
/ 13 сентября 2009

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

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

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

Artifacts introduced by the use of viewbox

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

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

...