2013-05-09 101 views
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> 

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

如何获得标签以扩展到网格列*的大小?

+1

如何在一列中使用多个GridViewColumns而不是Grid? – 2013-05-09 13:41:37

+0

你可以添加*到gridview列吗?这就是为什么我首先去了一个网格。我想让团队的名字填满剩余空间,我不知道如果用户调整应用程序的大小,剩下多少空间。 – Patrick 2013-05-09 15:32:53

+0

是的,你可以使用*。 – 2013-05-09 15:35:00

回答

0

问题是您的Grid根据其内容的大小只在GridView的大小。如果您为Grid启用ShowGridLines="True",则可以立即看到此问题。

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

我使用Snoop查看了一个GridView的VisualTree,并且看到没有实际拉伸的元素可以填充GridView中任何列的最大空间量,所以看起来您不能这样做与RelativeSource绑定。

如果您在GridView,虽然有一列,你也许可以用一个RelativeSource绑定绑定到GridViewRowPresenter的宽度,并使用Converter从价值消除X空间占Margins

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

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

当然,如果这是唯一的列在你的GridView,您将得到更好的服务正好利用多个GridViewColumns,而不是建立自己的GridGridViewColumn里面,像HB said