2013-08-07 5 views
2

Я хочу узнать, как использовать fontstretch в моих приложениях wpf.Работа с fontstretch в wpf

Я создал этот простой пользовательский контроль, рамку с закругленными углами с текстовым блоком. Я хочу растянуть текст текстового блока, чтобы заполнить мою границу. Я хочу избежать использования элемента управления viewbox для этого.

это мой UserControl XAML

<UserControl x:Class="DisplayObject" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="400" Background="Transparent"> 
    <UserControl.Resources> 
     <LinearGradientBrush x:Key="BackGroundBrush" StartPoint="0,0" EndPoint="1,1"> 
      <GradientStop Color="AntiqueWhite" Offset="0"/> 
      <GradientStop Color="White" Offset="0.45" /> 
      <GradientStop Color="Silver" Offset="1" /> 
     </LinearGradientBrush> 
    </UserControl.Resources> 
    <Border x:Name="LayoutRoot" CornerRadius="12" Background="{StaticResource BackGroundBrush}" BorderBrush="Black" BorderThickness="2"> 
     <TextBlock TextAlignment="Center" Text="{Binding Path=DisplayText}" 
        Background="Transparent" HorizontalAlignment="Center" VerticalAlignment="Center" 
        TextWrapping="Wrap" FontSize="12" FontFamily="Arial" FontStretch="UltraExpanded"/> 
    </Border> 
</UserControl> 

Из того, что я собираю от чтения онлайна шрифта Arial является OpenType так он поддерживает растяжение. Я попытался использовать горизонтальные/вертикальные значения выравнивания «Stretch», но это не помогло. Не уверен, что я сделал неправильно, но я подумал, что кто-то на этом сайте может объяснить, почему он не растягивается для меня и как его исправить.

Спасибо, что прочитали мое сообщение.

ответ

3

Шрифт Arial, похоже, не поддерживает значение FontStretchUltraExpanded. Попробуйте значение UltraCondensed вместо того, чтобы увидеть его работу:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Row="0" Text="{Binding DisplayText}" FontSize="30" 
     FontFamily="Arial" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
    <TextBlock Grid.Row="1" Text="{Binding DisplayText}" FontSize="30" 
     FontFamily="Arial" HorizontalAlignment="Center" VerticalAlignment="Center" 
     FontStretch="UltraCondensed" /> 
</Grid> 

Посмотрите на Why FontStretch does not work in WPF? посте, чтобы выяснить, является альтернативой этой малоупотребляемой собственности.

+0

UltraCondensed, похоже, все хлынет, но похоже, что Arial действительно не поддерживает многое другое, кроме этого конкретного значения. Я видел этот поток, на который вы ссылались, где я узнал, что шрифты OpenType должны использоваться. Я попробую scaletransform и посмотрю, может ли он соответствовать моим потребностям. Я не уверен, что понимаю, почему инфраструктура сохранила свойство fontstretch, если scaletransform заканчивается тем, что вы используете, чтобы сделать что-то вроде этого? – TWood

+0

WPF не имеет контроля над тем, какие шрифты поддерживают определенные функции ... Я думаю, что это действительно больше вопрос, почему создатели шрифтов не предоставляют все варианты вариантов. – Sheridan

+0

Похоже, что скальтрансформ будет тем, что я должен использовать. Поддержка лучше с этим методом вместо fontstretch. Теперь то, что мне нужно для работы, это написать конвертер для вычисления значения масштаба, заданного различными размерами моего usercontrol. Похоже на то, что может делать viewbox, но, надеюсь, с меньшими накладными расходами. – TWood