Текстовое поле, заполняющее все доступное пространство в строке сетки

#c# #wpf

#c# #wpf

Вопрос:

У меня возникла проблема с моим кодом пользовательского интерфейса XAML. Проблема в том, что я не могу заставить свой TextBox заполнить все доступное пространство в строке сетки, которая его содержит. Я прочитал довольно много сообщений о подобных проблемах, и их краткое изложение таково: «не используйте панель стека для этого» и «установить VerticalAlignment="Stretch" «, но у меня это не сработало. В нижней части моего XAML вы можете увидеть текстовое поле, которое я пытался растянуть, чтобы заполнить высоту строки сетки, вместе с текстовым полем, которое я надеюсь доработать к концу в комментарии.

Наличие VerticalAlignment="Stretch" не изменяет поведение XAML и создает однострочное, TextBox как будто я вообще не назначал VerticalAlignment="Stretch" . Так выглядит страница графического интерфейса с или без VerticalAlignment="Stretch" :

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

Вот соответствующий код XAML.

 <ContentControl x:Class="Analytics.Configuration.UI.DataflowTemplateView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
            xmlns:local="clr-namespace:ComputersUnlimited.Analytics.Configuration.UI"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:core="http://schemas.cu.net/2011/xaml/presentation/core"
            mc:Ignorable="d" 
            d:DesignHeight="450" d:DesignWidth="800"
            d:DataContext="{d:DesignInstance local:DataflowTemplateViewModel, IsDesignTimeCreatable=True}">

<Grid x:Name="LayoutRoot">

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    

    <Grid Grid.Row="0" x:Name="Row0">

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <Button Grid.Column="0" Command="{Binding NavigateToPreviousControlCommand}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,20,0">Back</Button>

        <TextBlock Grid.Column="1" Text="M-Code Template Text" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center"/>

    </Grid>

    <!--<TextBox Grid.Row="1"
             TextWrapping="Wrap"
             HorizontalAlignment="Stretch"
             VerticalAlignment="Stretch"
             Margin="0,6,0,6"
             AcceptsReturn="True"
        HorizontalScrollBarVisibility="Disabled"
        VerticalScrollBarVisibility="Auto"/>-->
    <TextBox Grid.Row="1" VerticalAlignment="Stretch"/>

</Grid>
  

Я перепробовал все советы, с которыми столкнулся, но безуспешно. Итак, если у вас есть какие-либо советы, мы будем признательны за обмен.

Спасибо.

Ответ №1:

Скорее всего, для TextBox этого есть неявный стиль, устанавливающий значение по умолчанию Height . Если это так, вам нужно установить:

Height="NaN"

На вашем TextBox , чтобы оно растянулось.

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

1. ВОТ И ВСЕ. Спасибо. Но теперь я задаюсь вопросом, почему? Что такое неявный стиль, когда они применяются и т.д. Я поищу «Неявные стили XAML», если у вас нет лучшей рекомендации. Еще раз спасибо.

2. Неявный стиль не имеет ключа. Это выглядит примерно так <Style TargetType="TextBox"><Setter Property="Height" Value="20" /></Style> . Скорее всего, это в , ResourceDictionary который объединен в App.xaml или где-то еще в вашем приложении. Если вы используете стороннюю тему, она тоже может быть там.