【问题标题】:LonglistSelector in scrollViewer not scrollablescrollViewer 中的 LonglistSelector 不可滚动
【发布时间】:2013-12-10 05:11:18
【问题描述】:

在我的项目中,我需要在 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,布尔表示是否被选中(另一种样式)和一个字符串Link,在自定义点击事件中返回。

结果如下所示:

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

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

编辑:

当我使用 longlistselector 和周围的东西时,我发现滚动有效,问题是 LongListSelector 只加载适合消息框的项目而不是所有项目.....(当我创建较小的消息框时,它显示的项目更少,当我创建更大时,它显示更多)

所以问题有点转移到:

如何让 LONGLISTSELECTOR 显示所有项目,而不是只显示适合屏幕的项目。

【问题讨论】:

  • 您似乎没有固定滚动查看器的高度。尝试给 ScrollViewer 一些高度,以便在其子高度大于其高度时滚动
  • 你不能在scrollviewer中制作longlistselector
  • 该页面上的解决方案在哪里?
  • 我并不是说那个页面上有解决方案,我只是说他在 scrollviewer 中使用 longlistselector 并且它有效,所以我不明白你为什么说这是不可能的当它显然是。

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


【解决方案1】:

所以我在代码中看到了三个明显的问题:

  1. 您正在 C# 中创建 ScrollViewer 的新实例,但实际上并未将 choiceSelector 实例添加到 viewer 实例。不确定您是否只是在示例中遗漏了它,或者您实际上并没有添加它。

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

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

  3. 话虽如此,您是否从http://phone.codeplex.com Toolkit 中查看了 ListPicker 控件?这似乎更接近您正在寻找的内容。

HTH

【讨论】:

  • 1.是的,它只是被排除在样本之外。我会修复它。 2.我不知道,我用的时候一般不会。我应该设置一些属性吗? 3. 不知道listpicker,我有空去研究一下:)
  • 2. - 阅读它,但从未遇到过。即使我更改了网格的堆栈面板(将 rowdefinition 设置为 * 并且 longlistselector 专门设置为该行),它也不起作用。
  • 完美。我在 StackPanel 中有一个 LongListSelector,由于上面给出的原因,它失去了滚动的能力。换成Grid现在就好了。
【解决方案2】:

这就是我在代码中使用 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>

【讨论】:

  • 您能在 CustomMessageBox(Windows Phone Toolkit 的一部分)中尝试一下吗?因为我的解决方案适用于常规页面,但不在 CustomMessageBox 内 - 即使我设置了最大宽度,它上面的 textWrapping 也停止工作......
【解决方案3】:

将 longlistselector 的高度限制在 200 左右,小于用户控件的高度。确保在长列表选择器的 xaml 中提及 Height = " " 属性。

【讨论】:

    猜你喜欢
    • 2014-05-24
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2013-04-20
    相关资源
    最近更新 更多