ViewBox
non vi permetterà di mantenere una dimensione di carattere costante, che non è solo come funziona. Hai bisogno di mettere il testo al di fuori della casella di visualizzazione per quel che accada:
<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>
Si noti che ho rimosso la proprietà Width dal TextBlock
, ho appena lasciarlo allungare per la larghezza della griglia, lasciando che l'allineamento del testo prende cura del centraggio.
Oppure, si potrebbe ottenere creativo e associare la proprietà FontSize
alla ActualWidth
del ViewBox
e averlo scalato in modo appropriato, per esempio:
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();
}
}
Usage:
<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>
fonte
2010-01-06 15:25:32
Grazie. Immagino di aver semplificato il mio esempio un po 'troppo. Ho bisogno del Viewbox per occuparmi della posizione del mio testo, ma non è FontSize. – Hallgrim
Aggiunta un'alternativa alla mia risposta, provalo. È un po 'eccessivo, ma potrebbe funzionare :) –
Impressionante! Ha funzionato, ma speravo in qualcosa di più semplice. – Hallgrim