17

次のようにWPF UIを配置しようとしています:

モックアップ

  1. ウィンドウの上部には、自己決定する高さのコントロールがあります (ウィンドウの上部に効果的にドッキングされますが、必要な高さになります)。
  2. これらのコントロールの下には ListView があります。ListView には、それぞれ高さが異なるさまざまな数の項目を含めることができます。問題: ListView は、必要以上に高くしてはいけません。リスト ビュー内のすべてのアイテムがウィンドウに簡単に収まる場合は、ListViewの高さがすべてのアイテムを表示する正確な高さになるようにします(したがって、ウィンドウは、下部に空白スペースがある Web ページのフロー レイアウトのように見えます)。一方、すべての ListView アイテムがウィンドウに収まらない場合は、UI 全体がウィンドウに収まるようにします(下の 3 番がウィンドウの下部にドッキングされ、ListView が使用可能なスペースを埋めているかのように)。 . ユーザーがウィンドウのサイズを変更したり、リストビューの内容を変更するボタンを押したりすると、これはすべて動的に調整する必要があります。
  3. ListView の下には、自己決定型の高さのコントロールがいくつかあります。これらは、常に ListView のすぐ下に隙間なく表示される必要があります。特に、ListView のすぐ下に収まる場合は、ウィンドウの下部にドッキングするだけではいけません。

解決策は大歓迎です。私はしばらくいじって、最初のコントロールが上部にドッキングされたウィンドウで外側の DockPanel を使用し、ListView が残りのスペースを埋めるが、VerticalAlignment="上"。

純粋な XAML ソリューションが理想的ですが、コード ビハインドが避けられない場合は気にしません。このような複数の配置を垂直に積み重ねることができるソリューションのボーナスポイント:) 助けてくれてありがとう!

4

4 に答える 4

19

試す

<Grid VerticalAlignment="Top">
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="auto" />

    </Grid.RowDefinitions>

    <Button Content="hello" />
    <ScrollViewer Grid.Row="1" >
    <ListView >
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <ListBoxItem Content="hi" />
            <!-- Some Items -->
    </ListView>
    </ScrollViewer>
    <Button Content="hello" Grid.Row="2" />

</Grid>
于 2011-03-16T02:20:58.777 に答える
2

3 つの行で Grid を使用し、3 つすべての高さを Auto に設定して、コンテンツに合わせてサイズを調整します。

<Window x:Class="WpfApplicationUnleashed.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:WpfApplicationUnleashed"
        Title="Window1" >
    <Grid VerticalAlignment="Top">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

        <StackPanel Margin="10" Grid.Row="0" Orientation="Horizontal">
            <Button Margin="10">These are top controls</Button>
            <Label Margin="10">These are top controls</Label>
            <TextBox Margin="10">These are top controls</TextBox>
        </StackPanel>

        <TreeView Margin="10" Grid.Row="1">
            <TreeViewItem Header="Item 1" >
                <TreeViewItem Header=" Sub Item 1" />
                <TreeViewItem Header=" Sub Item 2" />
                <TreeViewItem Header="Sub Item 3" />
            </TreeViewItem>
            <TreeViewItem Header="Item 2" />
            <TreeViewItem Header="Item 3" />
            <TreeViewItem Header="Item 4" />
        </TreeView>

        <StackPanel Margin="10" Grid.Row="2" Orientation="Horizontal">
            <Button Margin="10">These are bottom controls</Button>
            <Label Margin="10">These are bottom controls</Label>
            <TextBox Margin="10">These are bottom controls</TextBox>
        </StackPanel>


    </Grid>
</Window>
于 2011-03-16T02:20:52.083 に答える
0

リストビューと下部のコントロールを独自のスタックパネルに配置するだけでは十分ではありませんか?

于 2011-03-16T00:40:22.897 に答える