Как использовать другую систему координат в WPF? (только масштабирование)
Вопрос
(Позвольте мне дать вам некоторый контекст) В настоящее время я разрабатываю приложение, которое должно генерировать печатную страницу формата А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 вашего монитора или принтера.