none
WPFで.Net 2.0のListView のLargeIcon のような表示を実現するには? RRS feed

  • 質問

  • デスクトップのような状態をWPFで実現するにはどのようにすればよいでしょうか?
    必要な機能は下記3点です。

    1)アイテム:UIElement をコンテナ:UIElement 内の自由な位置に配置できる(ドラッグ移動等も実装できる)。
    2)複数のアイテム:UIElement を矩形選択できる。
    3)コンテナ内でドラッグ移動等の処理やデザインを自由に定義(カスタム実装でよい)できる。

    WPFのListViewコントロールでは、LargeIcon表示のような機能は見つけることができませんでした。
    また、DataTemplateをカスタマイズしても、LargeIcon表示のような表示のカスタマイズ方法が分かりませんでした。

    現在、ListViewのようなコントロールを継承してデザインをカスタマイズするという
    理想的なやり方はあきらめ、Canvas内にアイテムを配置するだけという方法をとっていますが、
    その場合でも、2)の矩形選択のやり方が分かりません。

    上記の条件を満たすコントロールを作成するにはどのようなコントロールをどうカスタマイズすればよいのか?
    あるいは、パネル:Panel 内のアイテム:UIElement を矩形選択するにはどうすればよいのか?

    なにかしらのヒントだけでもご教授いただけないでしょうか?
    よろしくお願いします。
    2006年12月27日 11:18

すべての返信

  • ListViewコントロールの Viewプロパティが
    ビュー・モード を指定するプロパティになっていて,
    Viewプロパティは,ViewBase型になっています。

    .NET FrameworkがViewBaseから派生させて用意しているのは,
    今のところ GridView だけのようなので,
    それ以外は,自作する必要があるようです。

    ビュー・モード絡みのサンプルが

     ListView with Multiple Views Sample

    というものがあるので,それを見ると,
    ViewBaseから派生させるサンプル(PlainView)があります。

    サンプルのように ViewBaseからPlainViewのようなものを作成して,
    DataTemplateで各データの表示の調整をさらにすることになると思います。
    PlainView用に "tileView" と "iconView" がありますよね。

    (質問に対する参考となれるものなのかは,未確認)

    追記: TileView や IconView がかなり近いのを今確認したので,
    それを参考にすればやれるんじゃないかと思います。
    右クリックして,コンテキストメニューで TileView や IconView を選択すると,
    GridViewから表示が変わるので,見てみてください。

    2006年12月29日 19:25
  • ありがとうございます。
    年明けにさっそく調べてみます。
    2006年12月30日 7:53
  • しばらく放置していましたが、
    調査再開でようやく(1)の方法が分かりました。
    "ListView" や "ListBox" を使うのではなく、
    もっと上の "ItemsControl" を使用して、
    "ItemsPanel" や "ItemTemplate" のテンプレートをいじればよいのですね。

    ただし、選択方法や、(2)、(3)については、引き続き調査します。
    ご存じの方がいらっしゃいましたら、ご教示ください。
    2007年3月5日 8:09