【问题标题】:How to set grid's first column to fit available space after all another columns have taken required width?在所有其他列都占用所需宽度后,如何设置网格的第一列以适应可用空间?
【发布时间】:2016-03-03 14:12:50
【问题描述】:

我有一个包含三列的网格。我需要在以下情况下计算列的宽度:

1.第二列和第三列从网格中获取所需的宽度(为简单起见,暗示 сolumn2.width + column3.width 是 总是小于 grid.Width)。

2.在第一列占用第二列和第三列留下的所有可用宽度之后(即 col1 = grid.width - (col2.Width + col3.W))。

此外,如果第一列的文本不适合其宽度,则应将其换行(即文本应增加高度以显示其内容)。

我试过了

 <DataTemplate DataType="{x:Type s:DiagramDataList}">
                <ListView ItemsSource="{Binding DataElementList}"
                              HorizontalContentAlignment="Stretch"
                              Background="Transparent"
                              Focusable="False"
                              IsHitTestVisible="False"
                              BorderThickness="0"
                              ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                    <ListView.ItemTemplate>
                       
                        <DataTemplate>
                            <Grid HorizontalAlignment="Stretch">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition ></ColumnDefinition>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <TextBlock Text="{Binding Path=Title}"
                                               Grid.Column="0"
                                                   TextWrapping="Wrap"></TextBlock>
                                
                                <TextBlock Text="{Binding Path=CurrentValue}"
                                               Grid.Column="1"></TextBlock>
                                <TextBlock Text="{Binding Path=Difference}"
                                               Grid.Column="2"
                                               HorizontalAlignment="Right"
                                               Background="{Binding HtmlColor, Converter={StaticResource HtmlColorToColorConverter}}"
                                               Visibility="{Binding Path=Difference, Converter={StaticResource NullToVisibilityConverter}}"/>
                            </Grid>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </DataTemplate>

【问题讨论】:

  • 我认为你应该使用Width="Auto" 来表示column2column3 使其适合内容,然后使用Width="*" 来表示column1 以获得所有剩余的空间。
  • @Bolu,你是对的。我还切换到 DataGrid 以使行自动对齐。不是我的所有要求都完成了,但我正在努力。

标签: wpf


【解决方案1】:

列的宽度可以取以下值,
1.Number
固定大小。
2.自动
列宽 = 单元格内容的宽度。
3.*(星号/星号)
列宽=网格中的可用空间。

以下代码将提供所需的输出,

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

您可以使用数字而不是“自动”来保持这些列大小固定。

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2018-03-22
    • 2022-01-13
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多