Viewbox, содержащий TextBlock, кажется, имеет минимальную высоту - PullRequest
1 голос
/ 11 июня 2011

Я пытаюсь создать макет пользовательского интерфейса в WPF, который может масштабироваться в зависимости от размера окна.Идея состоит в том, чтобы иметь несколько элементов управления слева, несколько элементов управления справа и посередине, иметь строку текста.Это нормально, если строка текста обрезана справа.Главное, что соотношение сторон всех элементов управления сохраняется.

Эта часть работает нормально.Проблема в том, что центральная линия текста имеет минимальную высоту;ниже этой высоты он начнет отсекаться вертикально.Я хочу, чтобы текст продолжал сокращаться, если я сделаю окно очень тонким.Даже ручная установка 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 Ответ

3 голосов
/ 11 июня 2011

Проблема в том, что вам нравится 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...