如何在WPF Viewbox中保留常量FontSize?

时间:2010-01-06 15:11:57

标签: wpf xaml resize font-size viewbox

我有一个Viewbox,其TextBlockViewBox<Viewbox Stretch="Uniform"> <Canvas Width="100" Height="100"> <Ellipse Width="100" Height="100" Stroke="Black"/> <TextBlock Width="100" TextAlignment="Center" FontSize="12">Top Center</TextBlock> </Canvas> </Viewbox> 完美缩放和定位。像这样:

Viewbox

如果用户调整FontSize的大小,其内容将完美缩放以匹配。但是,无论Viewbox的实际大小如何,我都希望Resize保持为12。

我该怎么做?我可以在XAML中执行此操作而不附加{{1}}事件吗?

2 个答案:

答案 0 :(得分:10)

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属性绑定到ActualWidth的{​​{1}}并将其适当缩放,例如:

转换器:

ViewBox

用法:

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();
    }
}

答案 1 :(得分:7)

这也可能很容易解决。

<Viewbox StretchDirection="DownOnly" >
     <Label Content="Enable" FontSize="10" FontStretch="Normal" />
</Viewbox>