0

我正在制作一个简单的排行榜。我想要的是让团队名称列标签与其所在的网格列大小相同。

<ListView x:Name="TeamList" Background="#00000000" BorderBrush="#00000000">
    <ListView.View>
        <GridView>
            <GridView.ColumnHeaderContainerStyle>
                <Style>
                    <Setter Property="FrameworkElement.Visibility" Value="Collapsed"/>
                </Style>
            </GridView.ColumnHeaderContainerStyle>

            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="70"></ColumnDefinition>
                                <ColumnDefinition Width="10"></ColumnDefinition>
                                <ColumnDefinition Width="*"></ColumnDefinition>
                                <ColumnDefinition Width="10"></ColumnDefinition>

                                <!-- more columns for points -->
                            </Grid.ColumnDefinitions>

                            <Border Grid.Column="0" BorderBrush="#4Fd5f4ff" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Background="#4Fd5f4ff">
                                <Label Width="50" 
            HorizontalAlignment="Center" HorizontalContentAlignment="Center" 
            VerticalAlignment="Center" VerticalContentAlignment="Center" FontSize="23" FontWeight="Bold" 
            Foreground="Black">#1</Label>
                            </Border>

                            <!-- This is shortened to the size of the content -->
                            <Border Grid.Column="2" BorderBrush="#7Fd5f4ff" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Background="#7Fd5f4ff">
                                <Label  Height="40" Content="{Binding Path=Name}"
            FontSize="19" FontWeight="Bold" Padding="20 0 0 0"
            Foreground="Black" VerticalContentAlignment="Center" VerticalAlignment="Center"></Label>
                            </Border>

                            <!-- More columns for points -->
                        </Grid>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

上面列出了主题名称,但边框/标签的宽度被缩短为实际内容的大小。

我怎样才能让标签扩展到网格列的大小 * ?

4

1 回答 1

1

问题是您Grid的大小仅GridView根据其内容的大小。如果你打开ShowGridLines="True"你的,Grid你可以立即看到这个问题。

为了避免这个问题,你必须给你Grid一个宽度。

我在 VisualTree 中查看了一个GridViewusing Snoop,发现没有任何元素可以实际拉伸以填充 GridView 中任何列的最大空间量,因此您似乎无法通过RelativeSource绑定来执行此操作。

如果你有一个单列GridView,你可能会通过使用绑定绑定到的宽度来接近GridViewRowPresenterRelativeSource并使用Converter从值中删除 X 空间来解释Margins

<Grid Width="{Binding Path=ActualWidth, Converter={StaticResource MyConverter}",
    RelativeSource={RelativeSource AncestorType={x:Type GridViewRowPresenter}}"
    ... />

但如果可用,静态宽度可能更容易。

当然,如果这是您的 Column 中唯一的 Column ,那么使用 multiple 而不是像HB 所说的那样在单个Column 中构建自己的ColumnGridView会更好。GridViewColumnsGridGridViewColumn

于 2013-05-09T14:23:15.413 回答