我有一个Viewbox
,其TextBlock
个ViewBox
被<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}}事件吗?
答案 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>