Как правильно выровнять и растянуть текст в dockpanel?

#wpf #text-alignment #dockpanel

#wpf #выравнивание текста #dockpanel

Вопрос:

В xaml DataTemplate у меня есть

 <DockPanel >
    <StackPanel DockPanel.Dock="Right" Orientation="Vertical">
        <Button />
        <Button />
    </StackPanel>
    <Grid VerticalAlignment="Stretch/Center">
        <TextBlock HorizontalAlignment="Stretch"
                   TextAlignment="Right"
                   Text="{Binding ...}"
                   VerticalAlignment="Stretch"
                   DockPanel.Dock="Right"/>
    </Grid>
</DockPanel>
 

Панель dockpanel горизонтальна, т.Е. stackpanel находится справа, сетка слева.

Мне нужны две кнопки, чтобы растянуть каждую на 50% от вертикального пространства высоты dockpanel. Как мне это сделать?

Схематическое изображение того, чего я пытаюсь достичь. Элементы управления должны максимально растягиваться до границ. введите описание изображения здесь

Мне нужно, чтобы текстовый блок растягивался до 100% вертикального пространства высоты dockpanel, а текст должен быть центрирован по вертикали. Это не работает до н.Э. в случае Strech я получаю 100% пробел, но текст находится сверху по вертикали, а в случае Center текстовый блок не растягивается.

Комментарии:

1. Я не слежу. Вы хотите TextBlock , чтобы сверху были кнопки? Пожалуйста, разместите фотографию того, что вы хотите.

2. Панель dockpanel горизонтальна, т.Е. stackpanel находится справа, сетка слева.

3. Где должен отображаться текст? A TextBlock не может одновременно «растягиваться до 100% вертикального пространства», а также, очевидно, быть центрированным по вертикали.

4. Почему это очевидно, что я этого не понимаю? Вы имеете в виду, что размер текстового блока всегда ограничен его текстом?

5. Почему вы хотите TextBlock растянуть? Текстовый блок — это просто текст, и вы также говорите, что хотите, чтобы текст был посередине …? Еще раз, пожалуйста, опубликуйте картинку того, что вы на самом деле хотите. Это все еще неясно.

Ответ №1:

A TextBlock не может одновременно «растягиваться до 100% вертикального пространства», а также быть центрированным по вертикали. В конце концов, это просто текст.

Вы должны быть в состоянии избавиться от StackPanel и заменить DockPanel на 2×2 Grid . Что-то вроде этого:

 <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Button Grid.Column="1" Content="Button1" />
    <Button Grid.Column="1" Content="Button2" Grid.Row="1" />
    <Grid Grid.RowSpan="2">
        <TextBlock Grid.RowSpan="2"
                   TextAlignment="Right"
                   Text="Text..."
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"/>
    </Grid>
</Grid>
 

введите описание изображения здесь