【问题标题】:Grid column with width="*" does not use all available space as expected [duplicate]宽度=“*”的网格列未按预期使用所有可用空间[重复]
【发布时间】:2022-01-13 17:10:05
【问题描述】:

我第一次使用 ListView 时遇到问题。我的自定义项目(当前)应该有 2 行 3 列,每列包含一个标签(第一列宽度 =“自动”),一个文本框(填充第二列(用 =“”或宽度 =“100") 和第三列中的按钮 (width="Auto")

不幸的是,第二列无法缩放以使用完整的 Listview 宽度,但其行为类似于 width="Auto"。

请注意,最初我在 DataTemplate 中使用 StackPanel 作为顶部控件,并将其替换为网格,只是为了检查它是否可以解决问题。

在测试应用程序中直接在窗口中测试 DataTemplate Grid 工作正常。

              <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <Label Content="Input Paths"/>
                <ListView Grid.Row="1" ItemsSource="{Binding PathListAccess.PathList.PathList}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="*"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="Auto"/>
                                    </Grid.RowDefinitions>
                                    <!--Row 0-->
                                    <Label Grid.Row="0" Grid.Column="0" Content="Input Directory:"/>
                                    <TextBox Grid.Row="0" Grid.Column="1" HorizontalAlignment="Stretch" Text="{Binding InputPath}"/>
                                    <Button Grid.Row="0" Grid.Column="2" Content="..."/>
                                    <!--Row 1-->
                                    <Label Grid.Row="1" Grid.Column="0" Content="Output Directory:"/>
                                    <TextBox Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" Text="{Binding OutputPath}"/>
                                </Grid>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </Grid>

【问题讨论】:

  • 除非你设置 ListView 的 View 属性,否则最好使用更简单的 ListBox 基类。
  • 感谢您的提示。你当然是对的。视图尚未设置,因为它们正在准备中。

标签: c# wpf wpf-grid wpf-listview


【解决方案1】:

我认为问题在于ListView 的默认值为HorizontalContentAlignmentLeft

尝试将HorizontalContentAlignment 设置为Stretch

<ListView Grid.Row="1" ItemsSource="{Binding PathListAccess.PathList.PathList}"
          HorizontalContentAlignment="Stretch">

【讨论】:

  • 是的,就是这样。很大的帮助!我会搜索很长时间才能找到这个,因为我只是在寻找 ItemTemplate 级别的问题.. 比你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 2019-08-30
相关资源
最近更新 更多