我有一个使用LongListSelector显示项目列表的应用程序,在页面底部我有一个TextBox。轻触TextBox时,SIP会显示自己。此时,我无法滚动到LLS的顶部。
示例代码:
XAML:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<phone:LongListSelector x:Name="TheList">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"
Style="{StaticResource PhoneTextLargeStyle}"/>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</Grid>
<Grid Grid.Row="1">
<TextBox />
</Grid>
</Grid>
C#:
public MainPage()
{
InitializeComponent();
Loaded += (sender, args) =>
{
var list = new List<string>();
for (var i = 0; i < 30; i++)
{
list.Add("This is string number " + i);
}
TheList.ItemsSource = list;
};
}
这是我能看到的,我可以下拉到5号字符串,但看不到任何更高的字符串:
有人有任何想法吗?
答案 0 :(得分:1)
ScrollViewer
未考虑SIP,因此其滚动体验与SIP不可见时相同(这就是无法达到顶部的原因)。当显示SIP时,一种解决方法是在LongListSelector
的顶部添加边距(如果文本框位于顶部,则为底部)。
由于没有SIP事件,您可以处理TextBox的GotFocus
和LostFocus
事件。 (180
值是通过反复试验获得的)
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
TheList.Margin = new Thickness(0,180,0,0);
}
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
TheList.Margin = new Thickness();
}