ViewBox
不允許你保持一個固定的字體大小,這只是它不是如何工作的。你需要把文本視圖框外要做到這一點:
<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>
注意,我從TextBlock
刪除Width屬性,我就讓它伸展網格的寬度,讓文本對齊取關心中心。
或者,你可以發揮創意並綁定FontSize
屬性爲ViewBox
的ActualWidth
並讓它適當比例,例如:
轉換器:
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();
}
}
用法:
<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>
謝謝。我想我簡化了我的例子太多了。我需要Viewbox來處理我的文本的位置,但不是它的FontSize。 – Hallgrim 2010-01-06 21:12:17
爲我的答案增加了一個替代方案,試試吧。這有點過度創意,但它可能工作:) – 2010-01-06 21:21:33
令人印象深刻!這工作,但我希望有一些更簡單。 – Hallgrim 2010-01-08 21:40:40