ViewBox
ne vous permettra pas de garder une taille de police constante, ce n'est tout simplement pas comment cela fonctionne. Vous avez besoin de mettre le texte en dehors de la zone de vue pour que cela se produise:
<Grid>
<Viewbox Stretch="Uniform">
<Canvas Width="100" Height="100">
<Ellipse Width="100" Height="100" Stroke="Black"/>
</Canvas>
</Viewbox>
<TextBlock TextAlignment="Center" FontSize="12">Top Center</TextBlock>
</Grid>
Notez que j'ai enlevé la propriété Largeur du TextBlock
, je viens de le laisser étirer la largeur de la grille, laissant l'alignement du texte prendre soin du centrage.
Ou, vous pouvez faire preuve de créativité et de lier la propriété FontSize
à la ActualWidth
du ViewBox
et l'avoir mis à l'échelle appropriée, par exemple:
Converter:
class ViewBoxConstantFontSizeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(value is double)) return null;
double d = (double)value;
return 100/d * 12;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Utilisation:
<Window.Resources>
...
<local:ViewBoxConstantFontSizeConverter x:Key="conv"/>
</Window.Resources>
...
<Viewbox Name="vb" Stretch="Uniform">
<Canvas Width="100" Height="100">
<Ellipse Width="100" Height="100" Stroke="Black"/>
<TextBlock Width="100" TextAlignment="Center"
FontSize="{Binding ElementName=vb,
Path=ActualWidth,
Converter={StaticResource conv}}">
Top Center
</TextBlock>
</Canvas>
</Viewbox>
Merci. Je suppose que j'ai simplifié un peu trop mon exemple. J'ai besoin de la Viewbox pour prendre soin de la position de mon texte, mais pas de FontSize. – Hallgrim
Ajout d'une alternative à ma réponse, essayez-le. C'est un peu trop créatif, mais ça pourrait marcher :) –
Impressionnant! Cela a fonctionné, mais j'espérais quelque chose d'un peu plus simple. – Hallgrim