我有以下构造,它在StackPanel中显示一个DataBound ListBox和一个Button,它再次放在ScrollViewer中:
<ScrollViewer VerticalScrollBarVisibility="Visible"
Height="400">
<StackPanel Orientation="Vertical"
MaxHeight="400">
<ListBox x:Name="LbTelEntries"
SelectionChanged="LbTelEntries_SelectionChanged"
MaxHeight="340"
VerticalAlignment="Top"
ItemsSource="{Binding Path=TelItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<Templates:ListBoxItemTemplateSelector Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button x:Name="BtMoreTelEntries"
Content="More Results"
Click="BtMoreTelEntries_Click"
Visibility="{Binding Path=NumberRemainingResults, Converter={StaticResource NullToVisConverter}}"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Height="70"
Width="410"
Margin="0 0 0 0"
></Button>
</StackPanel>
</ScrollViewer>
我的问题是,当ListBox滚动到最后时,Button才会出现。单击Button后,将交换ListBox的内容,Button应再次移动到ListBox的末尾...
我将如何做到这一点?
编辑: 我应该提一下,我也在实现一个ItemTemplate。见下文:
<DataTemplate x:Key="ListBoxItemVmTemplate">
<Grid DataContext="{Binding}">
<StackPanel Orientation="Horizontal">
<Border x:Name="UpperListBoxTemplateBorder"
Height="42"
Width="44"
BorderBrush="White"
BorderThickness="2.5"
CornerRadius="100"
Margin="10,16,0,0"
VerticalAlignment="Top">
<Path x:Name="DataTemplatePath"
Height="16"
Width="11"
Fill="White"
Stretch="Fill"
Margin="4,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
UseLayoutRounding="False"
Data="M337.59924,129.61948 L337.59924,141.51501 L345.5704,135.87381 z" />
</Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"></RowDefinition>
<RowDefinition Height="22"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal"
Grid.Row="0">
<Controls:EllipsisTextBlock Text="{Binding DataModel.Title}"
MaxWidth="410"
Margin="18 12 0 0" />
</StackPanel>
<StackPanel Orientation="Horizontal"
Grid.Row="1">
<Controls:EllipsisTextBlock Text="{Binding DataModel.Street}"
FontSize="16"
MaxWidth="410"
Margin="18 -3 0 0" />
<Controls:EllipsisTextBlock Text="{Binding DataModel.ZipCode}"
FontSize="16"
MaxWidth="410"
Margin="18 -3 0 0" />
<Controls:EllipsisTextBlock Text="{Binding DataModel.City}"
FontSize="16"
MaxWidth="410"
Margin="18 -3 0 0" />
</StackPanel>
</Grid>
</StackPanel>
</Grid>
</DataTemplate>
答案 0 :(得分:1)
有一篇关于检测列表中最后一项何时滚动到http://blog.slimcode.com/2010/09/11/detect-when-a-listbox-scrolls-to-its-end-wp7/
的视频的博文您可以使用此技术动态添加按钮到屏幕吗? 如果需要,可以在滚动列表时再次将其删除。
只是一个想法。
答案 1 :(得分:0)
我不完全理解你的问题,但我看到错误的是你把一个堆叠面板放在一个滚动查看器中,但是你使用了很多固定(最大)的高度,所以滚动查看器已经没有任何意义了。
尝试从Stackpanel和列表框中删除height属性,看它是否符合您的要求。
答案 2 :(得分:0)
似乎无法实现我的想法。目前的解决方案是:
<ScrollViewer VerticalScrollBarVisibility="Visible">
<StackPanel Orientation="Vertical">
<ListBox x:Name="LbTelEntries"
SelectionChanged="LbTelEntries_SelectionChanged"
MaxHeight="340"
VerticalAlignment="Top"
ItemsSource="{Binding Path=TelItems}">
<ListBox.ItemTemplate>
<DataTemplate>
<Templates:ListBoxItemTemplateSelector Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button x:Name="BtMoreTelEntries"
Content="More Results"
Click="BtMoreTelEntries_Click"
Visibility="{Binding Path=NumberRemainingResults, Converter={StaticResource NullToVisConverter}}"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Height="70"
Width="410"
Margin="0 0 0 0"
></Button>
</StackPanel>
</ScrollViewer>
有了这个,我会永久地看到ListBox下方的Button。单击Button后,ListBox的内容将被扩展。据我所知,如果ListBox已滚动到最终,则无法检查...
答案 3 :(得分:0)
您应该删除在ListBox的template中隐式使用的ScrollViewer,如下所示:
<ListBox ...>
<ListBox.Template>
<ControlTemplate>
<ItemsPresenter/>
</ControlTemplate>
</ListBox.Template>
...
</ListBox>
这将使ListBox控件尽可能高,以显示其所有元素,在ListBox的最后一项之后按下按钮。
请注意,如果列表中有大量项目,这可能会影响您的应用程序的性能。
正如Wouter所建议的,您还应该从StackPanel和ListBox中删除MaxHeight属性,因为您想要的唯一高度限制是顶级ScrollViewer上的高度限制。
答案 4 :(得分:0)
Baba演示了如何在ListBox控件模板中使用ItemsPresenter和Button来完成此答案中列表末尾的“更多”按钮: