包含TextBlock的Viewbox似乎具有最小高度

时间:2011-06-10 23:40:18

标签: wpf textblock viewbox

我正在尝试在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>

1 个答案:

答案 0 :(得分:3)

问题是你喜欢Viewbox剪裁,当它水平发生但不想垂直剪裁时。换句话说,您需要UniformToFill,直到水平裁剪停止,然后您想切换到Uniform

要获得这两种行为,您需要替代Viewbox。前一段时间我在这个名为ViewboxPanel的Stack Overflow答案中写了一个这样一个布局元素的原型:

我刚测试过它,至少对于你的样本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>