Как использовать другую систему координат в WPF? (только масштабирование) - PullRequest
8 голосов
/ 22 января 2009

(Позвольте мне дать вам некоторый контекст) В настоящее время я разрабатываю приложение, которое должно генерировать печатную страницу формата А4 на основе некоторых данных. Естественно, независимые от устройства пиксели WPF (96 пикселей / дюйм) не являются естественной единицей измерения в мире бумаги. Что-то вроде миллиметров было бы более уместным. Поэтому я вытащил свой калькулятор и получил коэффициент масштабирования около 3.779.

Оказывается, что простое шлепание всего, что должно идти на странице в ScaleTransform, имеет один неприятный побочный эффект: Размер шрифта тоже масштабируется (естественно). Это, однако, не то, что я хотел. Я бы хотел, чтобы 12pt Arial отображался так же, как 12pt Arial - нормально.

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

Ответы [ 3 ]

18 голосов
/ 17 июля 2009

Для изложенных требований вам вообще не нужно делать ничего особенного, просто продолжайте и используйте сантиметры в качестве единицы измерения для самих элементов WPF (т.е. без какого-либо преобразования) - сама природа независимости устройства WPF позволяет вам на следующее:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="29.7cm" Width="21cm" FontSize="16pt">
    <Grid>
        <TextBlock Text="Sample" Height="1in" Width="1in" FontSize="12pt" 
            HorizontalAlignment="Center" VerticalAlignment="Center" 
            TextAlignment="Center"/>
    </Grid>
</Window>

То есть: вы получите окно A4, указанное в 'cm', с текстовым квадратом по центру, указанным в 'in', и шрифтом, указанным в 'pt'. Все они будут правильно масштабироваться с помощью любого преобразования, которое вы можете применить дополнительно, если это необходимо (например, с помощью ползунка масштабирования для порта просмотра пользователей), с учетом их относительных размеров, независимо от того, указаны ли они с разными единицами измерения (т. Е. Смешанное использование по желанию).

Доступные единицы: px (по умолчанию), in, cm и pt, см., Например, FrameworkElement.Height для получения подробной информации об их спецификации.

2 голосов
/ 17 июля 2009

Вы также можете установить размеры в точках (FontSize = "10pt"), в дюймах (FontSize = "10in") или в сантиметрах (FontSize = "10cm"). Конечно, реальный размер в этом случае зависит от настроек DPI в Windows и DPI вашего монитора или принтера.

0 голосов
/ 17 июля 2009

Просто установить размер шрифта на 12 / 3.779 = 3.175, нет? Присвойте его содержащему объекту, и он должен распространиться на всех детей.

...