0

Windows Phone プログラミングは初めてです。私のアプリケーションでは、電話の連絡先をリストするリストボックスがあります。現在、UI のリスト アイテムと同じサイズの通常のリストとしてリストされています。フロント エンドを次のように変更しようとしています。UI スクリーンショット

固定UIではなく、リスト項目ごとに異なるサイズ/背景色を使用したくなく、リストをスクロールさせ、ビュー内のリスト項目をいつでも写真のように表示する必要があります。

答えとしてコードは期待していませんが、例も歓迎します。この種の機能がどの機能を使用して可能であるかを知りたいので、読書をすることができます!

ありがとう、ディーパック

4

2 に答える 2

1

このように動作するように既存のコントロール (ListBox など) を変更するのは難しいため、RenderTransform を TranslateTransform として設定した ItemsControl を使用することをお勧めします。

Rectangle (Fill="Transparent" を使用) を ItemsControl の上に配置すると、ハンドラーを ManipulationStarted、ManipulationDelta、および ManipulationCompleted イベントにアタッチして、TranslateTransform の Y オフセットを設定することで「スクロール」を制御できます。

リスト内の項目のサイズを変更するには、カスタム パネルまたは手動設定の 2 つのオプションがあります。

カスタムパネル

スクロール位置を表すために作成するプロパティに基づいて、子のサイズを適切に変更するカスタム Panel 実装を作成できます。パネルを使用するように ItemsControl を設定し、ハンドラーをパネルの Loaded イベントにバインドまたはアタッチし、パネルへのポインターを保持することで、前述のプロパティを ManipulationDelta ハンドラー内から更新します。

手動設定

ManipulationDelta ハンドラーの内部から、ボックスのさまざまな高さを計算し、MyItemsControl.ItemContainerGenerator.ContainerFromIndex を使用して各アイテムのビジュアルを取得し、その高さを設定することもできます。

これをすべてカスタム UserControl 内に配置することをお勧めします。

TranslateTransform を使用したクリッピングで問題が発生する可能性がありますが、うまくいけば、これで始めることができます。残念ながら、これを最初の Windows Phone プロジェクトとして作成するには、かなり難しいコントロールのようです。

于 2013-05-02T06:30:22.493 に答える
0

だからついに私はそれを行う方法を見つけることができました。最初のアプローチは、@Murkaeusが提案したように、 UserControl と ManipulationDelta イベントハンドラーを使用することでした。ただし、何らかの理由で、manipulationDelta イベントは 2 本の指のジェスチャ (ズーム、ピンチなど) に対してのみトリガーされました。その理由はわかりません。そして、いくつかの試みの後、私はこれをあきらめなければなりませんでした。

次のアプローチは、Listbox 自体を使用することでした。Listbox のソースは、電話から連絡先情報を読み取った後に作成した List(of Models オブジェクト) として設定されました。リストボックス項目の高さと色は、「scaleLevel」という名前のモデルのプロパティにバインドされ、それに応じて IValueConvertors を実装することで変換され、さまざまなスケール レベルの定義済みの色と高さの値が与えられました。

[こちら] ( http://www.scottlogic.co.uk/blog/colin/2010/07/exposing-and-binding-to-a-silverlight-scrollviewer% E2%80%99s-スクロールバー/ )! このイベントは垂直オフセットの変更時にトリガーされ、スクロールが発生するたびに、現在の垂直オフセットに基づいて拡大するリストボックス項目と縮小するリストボックス項目を見つけます。

この情報を取得したら、(モデルの) リスト (リストボックスの高さと色にバインドされている) 内の影響を受けるアイテムのプロパティ ("scaleLevel") を変更します。この変更は、INotifyPropertyChanged イベントを使用して UI で更新されます。

これが最善の方法かどうかはわかりませんが、うまく機能し、処理に関係なく UI を更新することはほとんどありません。

実装と、よりうまく機能すると思われるその他のソリューションについて、ご意見をお聞かせください。

于 2013-05-04T10:18:53.767 に答える