24

私は、WrapPanel 内に画像を表示したい ListBox を持つ UserControl (以下の XAML) を持っています。そこでは、1 つの行に収まる数の画像が表示され、次の行にラップされます。ListBox の場合を除き、機能します。ウィンドウで使用可能なスペースよりも大きくなると、垂直スクロールバーが表示されません。つまり、コンテンツが切り取られます。ListBox に固定の高さを設定すると、スクロールバーが表示され、期待どおりに機能します。このリストボックスを使用可能なスペースまで拡大し、垂直スクロールバーを表示するにはどうすればよいですか? このコントロールは、メイン ウィンドウのグリッド内の StackPanel 内にあります。ScrollViewer 内に StackPanel をラップすると、目的のスクロールバーが表示されますが、ListBox の上の UserControl にさらにコントロールを追加したい場合 (たとえば、画像サイズの「ズーム」など)、これは良い解決策ではありません。しません

ありがとう!!:)

<UserControl x:Class="GalleryAdmin.UI.GalleryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ListBox Name="itemListBox" BorderThickness="0" ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Background="LightGray" Margin="5" >
                    <StackPanel Margin="5">
                        <Image Source="{Binding Path=LocalThumbPath}" Height="100" />
                        <TextBlock Text="{Binding Path=Name}" TextAlignment="Center"></TextBlock>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>

4

5 に答える 5

20

ItemPanelTemplate をオーバーライドする方がよいと思います。

<Grid>
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBoxItem>listbox item 1</ListBoxItem>
    <ListBoxItem>listbox item 2</ListBoxItem>
    <ListBoxItem>listbox item 3</ListBoxItem>
    <ListBoxItem>listbox item 4</ListBoxItem>
    <ListBoxItem>listbox item 5</ListBoxItem>
</ListBox>

于 2013-02-07T18:01:26.270 に答える
15

さて、私はついに解決策に出くわしました。UserControlを次のようなプレースホルダーパネルに追加していました。

            <ScrollViewer Margin="20" >
                <StackPanel Name="contentPanel"></StackPanel>
            </ScrollViewer>

しかし、代わりにグリッドに切り替えると、物事は私が望むように機能し始めました。

<Grid Name="contentPanel" Margin="20" />

グリッドが行っているように、デフォルトですべての垂直スペースを占有しないStackPanelに関係していると思います。

于 2009-05-11T05:24:15.380 に答える
6

私がしなければならなかったのは、次のように設定するだけで、問題は解決しました。

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled">
于 2013-12-02T16:37:15.920 に答える
2

この問題に関するいくつかの質問を調べていたところ、これは古いスレッドですが、これで答えが得られましたが、明確にするために....

レイアウト GRID は、このようなほとんどの問題に対する答えです。適切な ListBox/WrapPanel 操作を取得して使用可能なスペースを埋めるには、次のコードを使用します。

                    <Grid Grid.Row="1" MaxHeight="105">
                        <ListBox ItemTemplate="{DynamicResource StoreGroupTemplate01}" ItemsSource="{Binding StoreGroupHeader}"
                            ScrollViewer.HorizontalScrollBarVisibility="Disabled">
                            <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                    <WrapPanel Orientation="Horizontal"/>
                            </ItemsPanelTemplate>
                            </ListBox.ItemsPanel>
                        </ListBox>
                    </Grid>

これを別のグリッドに配置して、リストを画面の下部に配置します (つまり、Grid.Row="1")。MaxHeight を調整 (または削除) して、垂直スクロール バーが表示される前に表示領域を制御できます。現れます。

于 2013-09-23T18:35:43.513 に答える
1

リストボックスを ScrollViewer 内に配置し、scrollviewer の VerticalScrollBarVisibility プロパティを「Auto」に設定します。

        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
    <ListBox Name="itemListBox" BorderThickness="0" ItemsSource="{Binding}" >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Background="LightGray" Margin="5" >
                <StackPanel Margin="5">
                    <Image Source="{Binding Path=LocalThumbPath}" Height="100" />
                    <TextBlock Text="{Binding Path=Name}" TextAlignment="Center"></TextBlock>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>
</ScrollViewer>


HTH

于 2009-05-04T05:54:54.803 に答える