XAML WPF如何创建一个完美的分段网格(三分之一),无论孩子的大小都保持大小[关闭]

9avjhtql  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(78)

已关闭,此问题需要details or clarity,目前不接受回答。
**想要改进此问题吗?**通过editing this post添加详细信息并澄清问题。

上个月关门了。
Improve this question
我有一个基本的网格,它被分成三部分。

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

字符串
下面是假设的UI外观x1c 0d1x
但是,当第一个文本框中添加了太多文本时,网格列会自动调整大小,如下所示:

我的问题是:为什么网格栏会根据文本框的大小自动调整大小?有没有一种方法可以创建一个完全分段的网格,而不会响应子框的宽度?
我知道在这种情况下,我可以使用列或文本框的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>

smtd7mpg

smtd7mpg1#

这是因为所有项目都放在VirtualizingStackPanel中,但这个面板为子元素提供了无限的空间。
如果您限制ListBoxItem的大小,则此限制将传递给Border和Grid子级。
例如,可以通过在样式中绑定ListBoxItem大小来实现这一点。

<ListBox ---------->
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="Width"
                            Value="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=VirtualizingStackPanel}}"/>

字符串

相关问题