5

UserControl上部と下部に一連のコントロールを含める必要がある がありますLongListSelector。全体の高さの合計UserControlが画面の高さを超える場合があり (ほとんどの場合はそうなる)、その場合は全体UserControlをスクロール可能にする必要があります。

私の現在の設定は次のとおりです。

<staff:UserContentControl 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="clr-namespace:MyApp.Controls"
    xmlns:staff="clr-namespace:MyApp.Helpers"
    x:Class="MyApp.Controls.RemoteHomePage"

    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}">

    <ScrollViewer>
        <ScrollViewer.Content>
            <StackPanel>
                <TextBlock Txt="Text1" Sign="@" />
                <TextBlock Txt="Text2" Sign="#" />
                <controls:Divider />

                <TextBlock Txt="Text3" Sign="~" />
                <TextBlock Txt="Text4" Sign="~" />
                <controls:TextDivider Text="Divider text" />

                <phone:LongListSelector ItemsSource="{Binding Items}">
                    <phone:LongListSelector.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Title}" />
                        </DataTemplate>
                    </phone:LongListSelector.ItemTemplate>
                </phone:LongListSelector>
            </StackPanel>
        </ScrollViewer.Content>
    </ScrollViewer>
</staff:UserContentControl>

このソリューションは私のニーズを満たしますが、大きな問題もあります。現在LongListSelector、含まれているアイテムの量がかなり多い場合、ロードに非常に時間がかかります。300 個のアイテムを処理するのに 8 秒かかり、その間、UI 全体がブロックされます。を除くすべてを削除するとLongListSelector、次のようになります。

<staff:UserContentControl 
    ...>

    <phone:LongListSelector ItemsSource="{Binding Items}">
        <phone:LongListSelector.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Title}" />
            </DataTemplate>
        </phone:LongListSelector.ItemTemplate>
    </phone:LongListSelector>
</staff:UserContentControl>

その後LongListSelector、アイテムの量が非常に多い場合でも、ほとんどすぐにロードされます。しかし、明らかに、その上に他のコントロールが必要なので、問題は、この問題を解決するにはどうすればよいですか?

LongListSelector(関連する質問:内部でScrollViewerダブル スクロールなどが発生するのではないかと心配していましたが、最終的にはこの点ですべてがうまくいきました。LongListSelectorそれが他のスクロール可能なコントロールの内部にあることを何らかの形で知っているのか、それとも他の何かが起こっているのかはわかりません。私は気づいていません.非常に遅いですが、うまく動作する理由を説明していただければ幸いです.)

4

2 に答える 2

13

スクロールビューアは使用しないでください。longlistselectorは、画面が無限に高いと見なし、すべてのアイテムをレンダリングします。ユースケースを解決する代わりに、HeaderプロパティとFooterプロパティを使用して、リストアイテムの上または下にデータを追加します。

于 2013-01-19T05:13:51.800 に答える
1

ScrollViewer に LongListSelector 項目の仮想化を強制することはできません。

そのため、LongListSelector のみで動作を模倣する必要があります。

最初の項目に、StackPanel (1 番目の項目テンプレート) から必要なすべての要素が含まれるようにします。その他の要素は、基本的な LongListSelector 要素になります (2 番目の itemtemplate)。

項目に異なるテンプレートを設定する方法の説明は次のとおりです。Windows 8 CP で選択した ListViewItem のスタイリング

于 2013-01-18T22:00:38.810 に答える