Как использовать другую систему координат в WPF? (только масштабирование)

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

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

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

3 ответов


для изложенных требований вам не нужно делать ничего особенного, просто идите вперед и используйте сантиметры в качестве единицы измерения для самих элементов 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.Высота для деталей на их спецификации.


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


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