1

ウィンドウのサイズに合わせてスケーリングできる WPF で UI レイアウトを構築しようとしています。アイデアは、左側にいくつかのコントロール、右側にいくつかのコントロールを配置し、中央にテキスト行を配置することです。テキストの行が右側でトリミングされていれば問題ありません。主なことは、すべてのコントロールの縦横比が維持されることです。

その部分はうまく機能しています。問題は、テキストの中心線の高さが最小に見えることです。この高さを下回ると、垂直方向にクリッピングが開始されます。ウィンドウを非常に薄くすると、テキストが縮小し続けます。を手動で設定しFontSizeてもTextBlock機能しません。

左右のコントロールには最小幅がないことに注意してください。それらは無限に縮小する可能性があります。

私の XAML はここにあります。.NET 4.0 を使用しています。

<Window x:Class="TestWpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="75" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Viewbox Grid.Column="0" Stretch="UniformToFill" Margin="2">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Button Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">A</Button>
                <Button Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">B</Button>
                <Button Grid.Column="2" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">C</Button>
                <Button Grid.Column="3" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">D</Button>
            </Grid>
        </Viewbox>

        <Viewbox VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Column="1" Stretch="UniformToFill" Margin="2">
            <TextBlock>Here is a bunch of text that may prove to be interesting.</TextBlock>
        </Viewbox>

        <Viewbox Grid.Column="2" Stretch="UniformToFill" Margin="2">
            <Button HorizontalAlignment="Center">X</Button>
        </Viewbox>
    </Grid>
</Window>
4

1 に答える 1

3

問題は、水平方向のクリッピングが好きで、Viewbox垂直方向のクリッピングが望ましくないことです。つまり、UniformToFill水平方向のクリッピングが止まるまで、次に に切り替えたいということですUniform

これらの動作の両方を取得するには、 に代わるものが必要ですViewbox。少し前に、このスタック オーバーフローの回答で、このようなレイアウト要素のプロトタイプを次のように書きましたViewboxPanel

私はちょうどそれをテストしました、そして少なくともあなたのサンプル XAML のために、私はそれがまさにあなたが望むことをすると思います:

<local:ViewboxPanel VerticalAlignment="Top" HorizontalAlignment="Left" Grid.Column="1" Margin="2">
    <TextBlock>Here is a bunch of text that may prove to be interesting.</TextBlock>
</local:ViewboxPanel>
于 2011-06-11T02:36:22.557 に答える