none
ListBoxItem の表示位置を RenderTransform で設定した際の選択処理 RRS feed

  • 質問

  • Listbox の ItemsPanelTemplate を Canvas に変更して、Item を、任意の位置に表示するアプリを実装しています。

    ※↓こちらの質問の続きです。結局選択処理が必要になったので、ItemsControlではなく、Listboxを使ってます。
    http://social.msdn.microsoft.com/Forums/ja-JP/wpfja/thread/b43f2db9-b985-47e5-a00a-f69b432993cf


    ListBox の Item の表示位置は、各Item の RenderTransform で指定しました。
    Item自体は RenderTransform で指定した位置に描画されますが、Item選択の HitTest は、Canvasの添付プロパティ(Left/Top)で行われているらしく、RenderTransform で画面上に表示されているItemをクリックしても選択されません。
    Left/Top がデフォルトで(0,0)なので、何も表示されていない左上をクリックすると選択されます。

    回転や拡大縮小なども指定したいので、できれば RenderTransform で表示位置を指定し、表示している位置をクリックしてListBoxItemを選択したいのですが、ListBoxItem選択処理をカスタマイズする方法はありますでしょうか。

    よろしくお願いします。

    2010年2月15日 21:24

回答

  • ひょっとして、DataTemplate 内の要素に対して RenderTransform を適用していますか?
    ListBox.ItemContainerStyle などを使って ListBoxItem の Style として RenderTransform を指定する必要があると思いますが。
    • 回答としてマーク NIM5 2010年2月16日 4:40
    2010年2月16日 1:16
  • コネクトの以下の報告が該当するように思います。

    HitTest is buggy / not accurate for transformed (scaled etc.) visuals
    https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=309161&SiteID=212

    ちなみにVS2010 RCで試してみましたが、改善されていませんでした。RTMでは直っているといいのですが・・・


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    • 回答としてマーク NIM5 2010年2月16日 4:40
    2010年2月16日 2:12
    モデレータ

すべての返信

  • ひょっとして、DataTemplate 内の要素に対して RenderTransform を適用していますか?
    ListBox.ItemContainerStyle などを使って ListBoxItem の Style として RenderTransform を指定する必要があると思いますが。
    • 回答としてマーク NIM5 2010年2月16日 4:40
    2010年2月16日 1:16
  • コネクトの以下の報告が該当するように思います。

    HitTest is buggy / not accurate for transformed (scaled etc.) visuals
    https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=309161&SiteID=212

    ちなみにVS2010 RCで試してみましたが、改善されていませんでした。RTMでは直っているといいのですが・・・


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    • 回答としてマーク NIM5 2010年2月16日 4:40
    2010年2月16日 2:12
    モデレータ
  • Hongliangさん、trapemiyaさん

    早速の返信ありがとうございました。


    >Hongliangさん。

    おっしゃるとおり、DataTemplate内の要素にRenderTransformを指定していました。
    ListBoxItem の Style に設定した所、Itemの選択状態も含めてTransformできました。

    ありがとうございます。

    ExpresionBlend SDK のMouseDragElementBehavior を使いたい所ですが、ListBoxItem の Styleでビヘイビアを追加する書式が分からなかったので、自前で記述してうまくいきました。

    Styleでビヘイビアを設定する方法ってあるんでしょうか?


    >trapemiyaさん。
    貴重な情報ありがとうございます。
    今回の件と関係あるかわかりませんが、かなり気になる障害ですね・・・
    2010年2月16日 4:56