【问题标题】:ScrollViewer in ExpanderExpander 中的 ScrollViewer
【发布时间】:2015-09-18 09:45:43
【问题描述】:

我有一个带有扩展器的列表框,而扩展器又包含一个列表框。 我希望 ListBox with Expanders (listBox1) 和每个 Expander (listBox2) 内的 ListBox 都具有滚动功能,但我无法让最里面的滚动工作(即我的 XAML 中的 scrollViewer1)。

如何让两个滚动条都工作?

<ScrollViewer x:Name="scrollViewer1">
   <ListBox x:Name="listBox1" ItemsSource="{Binding Data}">
       <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <Expander>
                        <Expander.Header>
                            <TextBlock Text="{Binding Name}">
                            </TextBlock>
                        </Expander.Header>
                        <ScrollViewer x:Name="scrollViewer2">
                            <ListBox x:Name="listBox2" ItemsSource="{Binding Numbers}">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel>
                                            <Grid>
                                                <TextBlock Grid.Column="0" Text="{Binding}"/>
                                            </Grid>
                                        </StackPanel>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
                            </ListBox>
                        </ScrollViewer>
                    </Expander>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
   </ListBox>

【问题讨论】:

    标签: .net wpf xaml scrollviewer expander


    【解决方案1】:

    首先,你不需要滚动查看器标签:列表框自己处理滚动。要控制列表框滚动条的可见性,您可以使用ScrollViewer.HorizontalScrollBarVisibilityScrollViewer.VerticalScrollBarVisibility

    其次,内部列表框的垂直滚动条不会出现,因为没有高度限制,列表框将展开以显示所有项目。

    这是一个显示父列表框和内部列表框滚动条的工作代码:

    <Window x:Class="StackOverflow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox x:Name="listBox1" ItemsSource="{Binding Clients}">
            <ListBox.ItemTemplate>
                <DataTemplate>
    
                    <Expander>
                        <Expander.Header>
                            <TextBlock Text="{Binding Name}">
                            </TextBlock>
                        </Expander.Header>
    
                        <ListBox x:Name="listBox2" ItemsSource="{Binding Children}" MaxHeight="150">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel>
                                        <Grid>
                                            <TextBlock Grid.Column="0" Text="{Binding Name}"/>
                                        </Grid>
                                    </StackPanel>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
    
                    </Expander>
    
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
    </Window>
    

    要重现您的问题,只需删除第二个列表框上的 MaxHeight。

    【讨论】:

    • 谢谢!当窗口调整大小时,如何使 listBox2 缩放其高度以适应窗口?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多