WPF 如何创建完美的分段网格(三分之一),无论子级大小如何都保持大小

问题描述 投票:0回答:1

我有一个分为三等分的基本网格。这是 XAML

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

这是 UI 的样子

但是,当向第一个文本框添加过多文本时,网格列会自动调整大小。看起来像这样:

我的问题是:为什么网格列会根据文本框的大小自动调整大小?有没有办法创建一个完美的分段网格,并且不响应子项的宽度?

我知道在这种情况下我可以使用列或文本框的 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>
c# wpf xaml
1个回答
0
投票

您必须禁用水平滚动

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ...>
    ...
</ListBox>
© www.soinside.com 2019 - 2024. All rights reserved.