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

StackOverflow https://stackoverflow.com/questions/469495

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

scroll top