7

によって完全にスケーリングおよび配置され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ただし、 の実際のサイズに関係なく、 を 12まで維持したいと考えていViewboxます。

これどうやってするの?Resizeイベントにアタッチせずに XAML でこれを行うことはできますか?

4

2 に答える 2

12

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>

から Width プロパティを削除したことに注意してくださいTextBlock。テキストの配置で中央揃えを処理できるように、グリッドの幅に合わせて伸ばすだけです。

または、創造性を発揮してFontSizeプロパティを にActualWidthバインドし、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();
    }
}

使用法:

<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>
于 2010-01-06T15:25:32.153 に答える
7

これも簡単に修正できるかもしれません。

<Viewbox StretchDirection="DownOnly" >
     <Label Content="Enable" FontSize="10" FontStretch="Normal" />
</Viewbox>
于 2015-03-04T14:31:06.893 に答える