1

私はおそらく、Windows Phone 7 アプリを作成しようとしている最悪の "コーダー" ですが、助けが必要であり、笑えるほど簡単だと考える人もいるかもしれません (実際はそうかもしれません)。

私の問題: あるグリッドから画像をタップして、別のグリッドに大きな画像として表示するコードをどのようにコーディングすればよいでしょうか?

そして、私は詳しく説明します:

画面を分割する 2 つのグリッドがあるアプリ ページ (横向きモードのみ) があります。

最初のグリッド ( smallgrid) には、サイズが 1/10 に縮小された画像smallの Stackpanel ( ) を含む Scrollviewer ( ) が含まれており、基本的に画像のサムネイルが表示されます。smallimages

2 番目のグリッド ( contentgrid) は、その画像からサムネイル画像をタップすると、smallgridその画像が表示されるように設計されています。contentgrid

デフォルトでは、balloon0 が に表示されcontentgrid、小さな画像の 1 つをタップすると変化します。

これにいくつかのモックコードを提供しようとします:

<grid x:name="smallgrid">
  <scrollviewer x:name="small">
    <stackpanel x:name="smallimages">
      <image="balloon0.jpg"><image>
      <image="balloon1.jpg"><image>
      <image="balloon2.jpg"><image>
      <image="balloon3.jpg"><image>
    </stackpanel>
  </scrollviewer>
</grid>

<grid x:name="contentgrid">
  <image source="balloon0.jpg"><image>
</grid>

背後にあるコードは、助けが必要な場所です。一度クリックすると、その画像が画像を置き換えるボタンを使用することを考えていますが、そのcontentgrid方法がわかりません。

または、画像がタップされたときに画像を置き換えるジェスチャーリスナーを使用できますcontentgrid...しかし、その方法もわかりません。

どんな洞察も役に立ちます。私は C# コーダーではなく、言語や WP7 Silverlight についてもよく知っているので、助けてくれてありがとう。

4

2 に答える 2

4

Silverlight Toolkit アセンブリ参照を phoneapplicationpage 要素に (プロジェクトへの参照として) 追加してください。

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

次のように、Silverlight Toolkit の GestureListener を XAML で使用できます (大きな画像には必ず name プロパティを追加してください)。

<grid x:name="smallgrid">
   <scrollviewer x:name="small">
      <stackpanel x:name="smallimages">
         <image="balloon0.jpg">
           <toolkit:GestureService.GestureListener>
             <toolkit:GestureListener Tap="smallImage_Tap" />
           </toolkit:GestureService.GestureListener>
         <image>
         <image="balloon1.jpg">
           <toolkit:GestureService.GestureListener>
             <toolkit:GestureListener Tap="smallImage_Tap" />
           </toolkit:GestureService.GestureListener>
         <image>
         <image="balloon2.jpg">
           <toolkit:GestureService.GestureListener>
             <toolkit:GestureListener Tap="smallImage_Tap" />
           </toolkit:GestureService.GestureListener>
         <image>
         <image="balloon3.jpg">
           <toolkit:GestureService.GestureListener>
             <toolkit:GestureListener Tap="smallImage_Tap" />
           </toolkit:GestureService.GestureListener>
         <image>
      </stackpanel>
   </scrollviewer>
</grid>

<grid x:name="contentgrid">
   <image x:Name="BigImage" source="balloon0.jpg"><image>
</grid>

次に、コード ビハインドで次のようにイベントを処理できます。

private void smallImage_Tap(object sender, GestureEventArgs e)
{
    BigImage.Source = (sender as Image).Source;
}
于 2011-05-17T21:42:54.217 に答える
0

ツールキットのソース コードを調べると、XNA TouchPanel がタップ ジェスチャを検出するたびに GestureListener.Tap イベントが生成されるようです。直感的には、MouseLeftButtonUp イベントが生成されるたびにこれが発生すると予想されます。わかりました、常にではありませんが、説明されているタイプの対話では、基本的に「常に」です。

したがって、これらのレベル (XNA および Toolkit クラス) の両方が不要なオーバーヘッドであると感じています。少なくとも、タップ イベントのような単純なものについてはそうです。(その他のマイナスの影響: ツールキットを含める必要があるためアプリのサイズが大きくなり、より多くのアセンブリを読み込む必要があるため、起動が遅くなります。)

そうは言っても、たとえば、MouseLeftButtonUpイベントをリッスンするだけから始めます

<Image Source="123.jpg" MouseLeftButtonUp="smallImage_Tap" ImageOpened="..." ImageFailed="..."/>

ImageOpened/Failed イベントも含めました。必要に応じて、それらを使用してアプリを微調整できます。あまりにも頻繁なタップ イベントや画像の読み込みエラーなどの問題を解決できます。

于 2011-05-19T09:13:55.653 に答える