0

グリッドの削除について質問があります。

グリッドの最後の行またはすべての行を削除しても、グリッドにはまだ何か(実際には最後の行)が表示されています。実際にgrid.rowdefinitions.countが0であることを確認しました。使用したメソッドはremoveAtとremoveRange(0、grid.rowdefinitions.count)です。それのどこが悪いんだい?誰かが理由を言うことができますか?どうもありがとう!

//------------
<Grid DockPanel.Dock="Top" HorizontalAlignment="Left" Name="grid1" ShowGridLines="true" Width="200" Height="200">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <TextBlock Grid.Row="0" Grid.Column="0" Text="100" />
                <TextBlock Grid.Row="1" Grid.Column="0" Text="200" />
                <TextBlock Grid.Row="2" Grid.Column="0" Text="300" />
                <TextBlock Grid.Row="3" Grid.Column="0" Text="400" />
                <TextBlock Grid.Row="4" Grid.Column="0" Text="500" />
            </Grid>
            <StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Width="200" DockPanel.Dock="Top">
                <Button Width="80" Click="rem5Row">Remove 5 Rows</Button>
            </StackPanel>

//--------------

private void rem5Row(object sender, RoutedEventArgs e)
        {
            if (grid1.RowDefinitions.Count < 5)
            {
                Console.WriteLine("less than 5!");
            }
            else
            {
                grid1.RowDefinitions.RemoveRange(0,grid1.RowDefinitions.Count);
            }
        }
4

1 に答える 1

1

私はあなたの質問を正しく理解しているかどうかわかりません (そして、コードがあなたの言っていることを反映しているかどうかもわかりません)。しかし、「最終行」が表示されていることをどうやって知るのでしょうか?

行を削除し、それらの行のコントロールも削除されることを期待しています。ただし、これは WPF グリッドの機能ではありません。コントロールは行の子ではなく、RowDefinition.

したがって、すべての子コントロールは引き続きレンダリングされますが、Grid.Row無効であるため、「行 0」の位置にレンダリングされます。それらはマークアップ順にレンダリングされるため、最終結果は、最後に描画されるコントロールであるため、「最後の行」が表示されているかのように表示されます。実際、すべてのコントロールはまだ存在しています。それらはすべて画面上の同じ場所にあるだけです。

これを確認したい場合は、Snoop を使用してランタイム UI を調べることができます。または、テキストボックスの幅を設定して、行 0 ボックスが広くなるようにします。そうすれば、オーバーラップがはっきりとわかります。

于 2012-07-26T11:52:32.953 に答える