0

データバインドされたリストボックスにピンチズーム機能を追加しようとしています。これを行うための最も効率的な方法は何ですか?ListBoxをグリッドコントロール内に配置し、スクロール可能にしました。

これは私の現在のコードです。

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="10,0,10,10" Background="Black" >
        <ListBox Name="lstText" FontSize="24"  Foreground="White" SelectionMode="Single" Margin="10,0,10,10"  ScrollViewer.VerticalScrollBarVisibility="Visible"  >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel >
                        <TextBlock Text="{Binding Text}" TextWrapping="Wrap"></TextBlock>                           
                    </StackPanel>                        
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
    <toolkit:GestureService.GestureListener>
        <toolkit:GestureListener 
            Tap="GestureListener_Tap" 
            PinchCompleted="GestureListener_PinchCompleted"
            Flick="GestureListener_Flick">

        </toolkit:GestureListener>
    </toolkit:GestureService.GestureListener>
4

3 に答える 3

1

リストボックスは (ピンチやその他の方法で) ズームするようには設計されていません。

これを実装する場合は、さまざまなズーム レベルでコンテンツを再描画する必要があります。
ただし、克服すべき多くの問題があります。

  • この方法でテキスト サイズを変更できることをユーザーにどのように通知しますか?
  • リストボックス内のアイテムをスクロールして選択するための標準的な動作に影響を与えないようにするにはどうすればよいですか?
  • 折り返しと現在表示されているテキストに関して、スクロールはどのように動作する必要がありますか?
  • 電話で大量のテキストを表示するためにリストを使用しないでください。大量のテキストを表示する必要がある場合は、リストに短い「タイトル」を付けてから、詳細を別のページに表示します。このようにして、リスト内のテキストは、変更する必要がなく、常に読みやすいように常に十分な大きさで表示できます。
  • これはあなたが克服しようとしている本当の問題ですか、それともあるといいと思うものですか? 電話はアプリだけでは使用されないため、ユーザーが OS や他のアプリでテキスト サイズが固定されたリストを引き続き使用する必要がある場合、なぜこれが必要なのですか。
  • テキストのサイズを変更すると、フレームワークがリスト内のすべてを再描画するため、パフォーマンスに関する潜在的な問題が発生する可能性があります。ズーム中に画面に表示されているものだけを再描画するだけでよいように、遅延読み込みを使用することを検討できますが、これは、サイズが変化したときに表示されるものの上部 (および下部) を決定する方法に影響します。

要約: これはほぼ確実に不必要であり、非常に複雑でうまく行うのが困難です。本当にこれを試してみたい場合は、問題があればコードを投稿してください。

于 2010-12-20T16:12:54.403 に答える
0

Alex Yakhninは、長いテキストをスクロールするためのソリューションを提供します。

WP7用のスクロール可能なTextBlockの作成。--AlexYakhninのブログ

必要に応じて、TextBlockをScrollViewerでラップできます。テキストが十分に長い場合、テキストのサイズが大きくなるにつれて、さまざまな壁にぶつかることになります。Alexのソリューションは、StackPanelをScrollViewerでラップし、TextBlockを管理可能なセクションのStackPanelに追加するコントロールです。

于 2010-12-20T23:19:29.357 に答える