【发布时间】:2012-12-30 13:38:22
【问题描述】:
情况是这样的:
我有一个数据源,它被某些属性(我们称之为 Checked)过滤到视图模型上的两个列表中。称其为新旧。
新的需要显示在一个列表中,旧的需要显示在它下面的列表中。
哦,他们需要同时滚动。因此,如果 Old 当前不在屏幕上,它会在列表向上滑动时游入可见性。
我目前使用 LongListSelectors 解决了这个问题:
<ScrollViewer VerticalAlignment="Top" VerticalScrollBarVisibility="Auto">
<StackPanel>
<phone:LongListSelector x:Name="NewList" Margin="0,0,0,0" ItemsSource="{Binding New}" SelectionChanged="NewList_SelectionChanged">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17">
<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" Foreground="{Binding Color}" />
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
<phone:LongListSelector x:Name="OldList" Margin="0,0,0,0" ItemsSource="{Binding Path=Old}" Padding="0,20,0,0">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17">
<TextBlock Text="{Binding Name}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontStyle="Italic" Foreground="{Binding Color}"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</StackPanel>
</ScrollViewer>
滚动查看器内的堆栈面板内的两个长列表选择器。现在,这一切都非常有效,而这两个列表中都有一些东西。
但是,当其中一个没有任何内容时,它会立即扩展以填充其父级的整个高度。在这种情况下......无限滚动查看器。这意味着如果新列表中没有任何内容,则屏幕上绝对不会有任何可见的内容,如果新列表中没有任何内容......我几乎可以在经过新列表项后无限滚动。
我在这里有什么选择吗?如果没有以编程方式创建大量文本字段,然后尝试将事件附加到它,或者更糟糕的是,编写我自己的列表控件?标准列表框不起作用,因为它们都单独滚动。
有什么想法吗?
【问题讨论】:
-
手机没有 MaxHeight 属性吗?我知道有时它对于 WPF 来说有点蹩脚的解决方案,但它确实有效!
-
有。问题是,我要么向下滚动太远,要么扩展不够。
-
我也有类似的问题。您能否尝试删除您明确定义的 Scrollviewer 并使用 ItemSelector 的默认滚动。
标签: c# .net xaml windows-phone-8