WPF: порядок растяжки - PullRequest
       6

WPF: порядок растяжки

0 голосов
/ 28 апреля 2010

Я создаю модальное диалоговое окно, которое содержит три основных части: TextBlock, содержащий инструкции, ContentControl для диалоговой панели и ContentControl для диалоговых кнопок. Каждая из этих частей содержится в отдельной строке сетки.

У меня есть некоторые конкретные ограничения, когда речь заходит о размере диалога. У меня проблема с инструкциями TextBlock. Я хочу, чтобы инструкции были такими же широкими, как ContentControl для диалоговой панели. Инструкции должны затем обернуться и расти вертикально по мере необходимости. Если инструкции не могут расти вертикально, то они должны начать расти горизонтально.

Получить инструкции для ширины ContentControl и роста по вертикали было просто. Часть, которую я не могу понять, это как заставить его расти горизонтально, когда он находится вне вертикального пространства. Сначала я хотел создать класс, который расширяет TextBlock и переопределяет MeasureOverride. Однако этот метод запечатан. В настоящее время я играю с идеей иметь диалоговое окно переопределения MeasureOverride для расчета доступного размера для блока инструкций.

Мне не хватает гораздо более простого способа сделать это? У кого-нибудь есть идеи получше, чем эта? Похоже, возиться с MeasureOverride будет много работы.

Вот пример кода, который даст вам общее представление о том, как устроен диалог:

<Window
    x:Class="Dialogs.DialogWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="dialogWindow"
    ShowInTaskbar="False"
    WindowStyle="None"
    AllowsTransparency="True"
    Background="Transparent"
    ResizeMode="NoResize"
    SizeToContent="WidthAndHeight"
    WindowStartupLocation="CenterScreen">

    <Border Style="{StaticResource WindowBorderStyle}" Margin="15">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <TextBlock
                Margin="25,5"
                VerticalAlignment="Top"
                HorizontalAlignment="Left"
                Text="{Binding Instructions}"
                TextWrapping="Wrap"
                Width="{Binding ElementName=panelContentControl, Path=ActualWidth, Mode=OneWay}"/>

            <ContentControl
                x:Name="panelContentControl"
                Grid.Row="1"
                Margin="25,5"
                Content="{Binding PanelContent}"/>

            <ContentControl
                x:Name="buttonsContentControl"
                Grid.Row="2"
                HorizontalAlignment="Right"
                VerticalAlignment="Center"
                Margin="25,5"
                Content="{Binding ButtonsContent}"/>
        </Grid>
    </Border>

</Window>

1 Ответ

1 голос
/ 28 апреля 2010

Похоже, что вы действительно хотите создать новый Panel или получить из существующего, который будет иметь место из того, что в данный момент является вашим Grid. Panel отвечает за размещение вашего контента, поэтому вы должны пойти по этому пути, вместо того, чтобы связываться с Window.MeasureOverride.

Как именно вы хотите, чтобы ваш TextBlock рос горизонтально, и зачем вам это? Вы хотите, чтобы оно росло по горизонтали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...