我有一个分为三等分的基本网格。这是 XAML
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
但是,当向第一个文本框添加过多文本时,网格列会自动调整大小。看起来像这样:
我的问题是:为什么网格列会根据文本框的大小自动调整大小?有没有办法创建一个完美的分段网格,并且不响应子项的宽度?
我知道在这种情况下我可以使用列或文本框的 MaxWidth 来修复它。但是,这对我不起作用,因为网格父级可以是任何宽度。所以我没有办法设置一个常量 MaxWidth。
编辑:只有当网格放置在列表框中时,才会出现这种情况。当网格不在列表框中时,无论子内容如何,网格列都会保持其宽度。这是一个视频,展示了有/没有列表框之间的区别https://imgur.com/gO0e2w6
下面是我的列表框:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Hidden" x:Name="VariablesTable" SelectionMode="Extended" Grid.Row="1" ItemsSource="{x:Static vm:VariablesViewModel.Variables}" HorizontalContentAlignment="Stretch">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="BorderThickness" Value="0 0 0 0" />
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
<Setter Property="Margin" Value="0, 0, 0, 0"/>
<Setter Property="Padding" Value="0, 0, 0, 0"/>
<Setter Property="Height" Value="45"/>
<EventSetter Event="MouseMove" Handler="MouseMoveVariableEntry"/>
<EventSetter Event="DragEnter" Handler="DragEnterVariableEntry"/>
<EventSetter Event="DragOver" Handler="DragOverVariableEntry"/>
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="PreviewMouseLeftButtonDownVariableEntry"/>
<EventSetter Event="PreviewMouseLeftButtonUp" Handler="PreviewMouseLeftButtonDownVariableEntry"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate >
<DataTemplate>
<Border Background="#FF4A4A5E" BorderThickness="1" CornerRadius="8" Padding="10 5 10 5" Margin="0">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"></TextBox>
<TextBox Grid.Column="1"></TextBox>
<TextBox Grid.Column="2"></TextBox>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
您必须禁用水平滚动
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...>
...
</ListBox>