如何使标签与网格列宽度匹配

时间:2013-05-09 13:35:04

标签: wpf listview grid

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

<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>

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

如何让标签扩展到网格列的大小*?

1 个答案:

答案 0 :(得分:1)

问题在于,Grid只根据其内容的大小在GridView中调整大小。如果您为ShowGridLines="True"打开Grid,则可以立即看到此问题。

要避免此问题,您必须为Grid提供宽度。

我使用Snoop在VisualTree周围查找了GridView,看到没有任何元素可以实际延伸以填充GridView中任何列的最大空间量,因此它不会似乎您可以使用RelativeSource绑定执行此操作。

如果您的GridView中只有一个列,则可能通过使用GridViewRowPresenter绑定绑定RelativeSource的宽度并使用{{1从值中删除X空格以考虑Converter

Margins

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

当然,如果这是您<Grid Width="{Binding Path=ActualWidth, Converter={StaticResource MyConverter}", RelativeSource={RelativeSource AncestorType={x:Type GridViewRowPresenter}}" ... /> 中唯一的列,那么只需使用多个GridView而不是在单个{{1}内构建您自己的GridViewColumns,您就会好得多。和} HB said一样。