1

我有一个使用 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 个字符串,但看不到更高的值: LongListSelector 问题

有人有什么想法吗?

4

1 回答 1

1

ScrollViewer不考虑 SIP,因此其滚动体验与 SIP 不可见时相同(这就是无法到达顶部的原因)。LongListSelector一种解决方法是在显示 SIP 时在 , 的顶部(如果您的文本框位于顶部,则为底部)添加边距。

由于 SIP 没有事件,您可以处理 TextBox 的GotFocusLostFocus事件。(该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();
}
于 2013-06-10T16:08:11.173 回答