scrollViewer中的LonglistSelector不可滚动

时间:2013-12-10 05:11:18

标签: c# windows-phone-8 longlistselector windows-phone-toolkit

在我的项目中,我需要在custommessagebox中显示一个按钮列表。

现在,我没有设置它的问题,但是当我创建longlistselector时,将它添加到scrollviewer并显示cusstommessagebox,只显示几个按钮,我无法滚动更多。

我的代码如下:

    private void btnChronicity_ButtonClicked(object sender, Events.LinkEventArgs e)
    {
        editBox = new CustomMessageBox() 
        {
           ....
        };

        ScrollViewer viewer = new ScrollViewer();
        choiceSelector = new Controls.MessageBocChoiceSelectorControl();
        List<items> chronicity = new List<items>();
        foreach (ChronicityModel chronicity in ...Chronicities)
        {
            chronicity.Add(new items(chronicity.Name, chronicity.Selected, chronicity.Id));
        }

        choiceSelector.ItemSource = chronicity;
        editBox.Content = viewer;
        editBox.Show();
    }

并且choiceselector是usercontrol,如下所示:

<StackPanel>
    <Controls:LongListSelector x:Name="LayoutRoot">
        <Controls:LongListSelector.ItemTemplate>
            <DataTemplate>
                <Controls1:CheckableListButton Header1="{Binding Header}"
                                           Selected="{Binding Selected}"
                                           Link="{Binding Link}"
                                           ButtonClicked="CheckableListButton_ButtonClicked"/>
            </DataTemplate>
        </Controls:LongListSelector.ItemTemplate>
    </Controls:LongListSelector>
</StackPanel>

其中listbutton是另一个控件,基本上button包含多个textBlocks,boolean指示它是否被选中(另一个样式)和字符串Link,这是在自定义点击事件中返回。

结果看起来像这样: Problem

但问题是我无法滚动...

为什么会这样?如何解决?

编辑:

当我使用longlistselector和周围的东西我已经发现滚动工作时,问题是LongListSelector只加载尽可能多的项目,而不是所有这些......(当我创建较小的消息框时) ,它显示较少的项目,当我创建更大,它显示更多)

所以问题转移到了:

如何使LONGLISTSELECTOR显示所有项目,只要适合屏幕即可。

3 个答案:

答案 0 :(得分:3)

因此,我在代码中看到了三个不同的问题:

  1. 您正在使用C#创建ScrollViewer的新实例,但实际上并未将choiceSelector实例添加到viewer实例。不确定你是不是刚把它留在样品中,或者你实际上没有添加它。

  2. 我不建议在ScrollViewer中添加LongListSelector ....因为默认情况下它已经滚动了。您的问题是您将LongListSelector放在StackPanel中,它不会以任何方式限制LongListSelector的高度。

    相反,我会将LongListSelector放在Grid控件中,并使用 行高定义为*。这意味着网格高度为 约束到父容器。

  3. 话虽如此,您是否已查看http://phone.codeplex.com工具包中的ListPicker控件?这似乎与你正在寻找的东西更接近。

  4. HTH

答案 1 :(得分:0)

这就是我在代码中使用longlistselector的方式,它对我来说非常适合无限滚动。 看看它是否对你有帮助。

<Grid Background="#FFE6E2E2" Margin="10,10,0,0">
 <phone:LongListSelector x:Name="lb" Margin="0,0,0,0" ItemTemplate="{StaticResource ItemTemplate}"></phone:LongListSelector>
</Grid>

答案 2 :(得分:0)

将longlistselector的高度限制为大约200左右,这小于usercontrol的高度。确保在longlist选择器的xaml中提到Height =“”属性。