#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
или где-то еще в вашем приложении. Если вы используете стороннюю тему, она тоже может быть там.