最后的网格行以wpf显示在彼此的顶部

时间:2013-12-13 02:29:46

标签: c# wpf

我在后面的代码中将行添加到网格中,但每次最后的某些行都显示在彼此的顶部(重叠;就像它们在同一行中一样)。我知道我设置的行号不一样,每行的高度都是auto。

网格没有固定高度,但位于固定高度的标题页内。我正在使用带有网格的滚动条并且工作正常(当我添加更多项目时它会扩展),但最后总会有一些行重叠。所以它不像网格只接受固定数字或保持固定长度。即使我添加了几行,并且网格只占用屏幕的一半,最后几行将在末尾重叠。

我尝试使用网格似乎没有改变任何东西 - 我尝试将高度设置为自动,到固定高度,它都是一样的。我真的很困惑发生了什么。

任何建议都将非常感谢。我知道DataGrid可能在这里工作得更好但是现在我需要坚持使用这个网格。

这是我的xaml代码:

<TabControl Grid.ColumnSpan="5" Grid.RowSpan="15" Height="640">
   <TabItem>
       <TabItem.Header>
           <StackPanel Orientation="Horizontal" Height="23" VerticalAlignment="Center">
                    <Image Source= "image.png" Margin="0,-3,0,0" VerticalAlignment="Center" Height="17" />
                    <TextBlock Margin="5,0,0,0" VerticalAlignment="Center">text</TextBlock>
           </StackPanel>
       </TabItem.Header>
       <ScrollViewer VerticalScrollBarVisibility="Auto">
           <Grid Name="myGrid">
              <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="350"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="100"/>
                  <ColumnDefinition Width="*"/>
              </Grid.ColumnDefinitions>

              <Grid.RowDefinitions>
                  <RowDefinition Height="20"/>
                  <RowDefinition Height="5"/>
                  <RowDefinition Height="1"/>
                  <RowDefinition Height="20"/>
                  <RowDefinition Height="10"/>
              </Grid.RowDefinitions>
      </Grid>
     </ScrollViewer>
    </TabItem/
    ...

在后面的代码中,我以这种方式添加行(对现有的行):

RowDefinition rowNew1 = new RowDefinition();
rowNew1.Height = new GridLength(1, GridUnitType.Auto); 
myGrid.RowDefinitions.Add(rowNew1);

TextBlock tb = new TextBlock();
tb.Text = some_string;
myGrid.Children.Add(tb);
tb.Margin = new Thickness(10, 0, 0, 0);
Grid.SetRow(tb, some_number);

1 个答案:

答案 0 :(得分:0)

对我来说很好。确保您设置的行号实际上是正确的索引:

Grid.SetRow(tb, myGrid.RowDefinitions.IndexOf(rowNew1));