2013-06-25 111 views
6

我需要在網格的第二行添加一個矩形。 我需要矩形的寬度與網格的寬度相同。如何在XAML中的網格單元格上拉伸矩形

但問題是,網格的寬度是在運行時決定的。如果我試圖在後面的代碼上訪問WidthActualWidth,我分別得到NaN0.0

ColumnSpanStretch也不起作用。 下面是代碼:

<Grid x:Name="downloadPdfGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="20"/> 
     <RowDefinition Height ="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Button x:Name="btn" Content="{Binding Button}" Visibility="Collapsed" Click="OnButtonClick" Grid.Row="0"/> 
    <Rectangle x:Name="underlineRect" Stretch="UniformToFill" Height="2" Fill="White" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1"/> 
</Grid> 

回答

11

你試過:

<Rectangle x:Name="underlineRect" Stretch="UniformToFill" Height="2" Fill="White" 
      Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" 
      Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}}"/> 

或者,如果你有網格的名字:

<Rectangle x:Name="underlineRect" Stretch="UniformToFill" Height="2" Fill="White" 
      Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" 
      Width="{Binding ActualWidth, ElementName=downloadPdfGrid}"/> 

編輯:我忘了。我沒有用Rectangle本身工作太多,但這也可以工作:

<Rectangle x:Name="underlineRect" Stretch="UniformToFill" Height="2" Fill="White" 
      Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1" 
      HorizontalAlignment="Stretch"/> 
+0

謝謝西蒙。但它不起作用。 –

+0

然後,除了沒有顯示的網格外,還有其他的東西。我剛剛啓動了一個空白的WPF應用程序,只有您的網格在窗口內,並測試了您的原始代碼,並提出了所有三個更改,他們都工作(包括您自己的)。 –

+0

你說得對。問題是由於父元素。 謝謝西蒙。現在它工作得很好。 –