1

私はXAMLでこのコードを持っています

<Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,20">
            <TextBlock x:Name="ApplicationTitle" Text="Title" />
            <TextBlock x:Name="PageTitle" Text="title" Margin="9,-7,0,0" />
        </StackPanel>

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="22,0,12,0">
            <StackPanel>
                <ListBox Name="Cities"Height="Auto" Margin="4,3,0,10">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock FontSize="40" Text="{Binding Name}"></TextBlock>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </Grid>
    </Grid>

ListBox にアイテムを入れると、スクロールが機能しません。異なる画面解像度をサポートする必要があるため、リストボックスの固定高さを設定したくありません。自動高さが必要です。これどうやってするの?

4

1 に答える 1

3

子は 1 つしかないため、 は必要ありませんStackPanel。同じことがGrid名前付きの「ContentPanel」にも当てはまります。

両方とも外して にセットGrid.RowListBox、余白を調整します。

その理由はStackPanel、リスト ボックスが要求する高さに関係なく、その子の高さを制限していないためです。リスト ボックスが完全に表示されないことを意味する場合でも、スタック パネルがそれを提供します。リスト ボックスは必要な高さをすべて取得しているため、スクロールする必要はないと考えられます。これは実際に何が起こっているかを単純化したものですが、何が起こっているのかを理解するには十分です。

StackPanelその点で一種の「悪」です-子供が望む高さを静かに与えます。

UI を機能させるためにグリッドを削除する必要はありませんが、必要でもありません。ネストが少ないほど良いです。

于 2012-07-01T19:15:56.737 に答える