0

ListView コントロールの背景画像のレイアウトを変更する方法を見つけようとしました。私は周りを検索しましたが、明確な答えはありません。

仕事をするはずのListViewプロパティBackgroundImageLayoutがあることがわかります。しかし、変更しても、 BackgroundImageLayoutChangedイベントがトリガーされる以外には何も起こりません。

ListView コントロールで BackgroundImageLayout を変更するにはどうすればよいですか? 私の目標を達成するための回避策はありますか?

PS .: この問題を「修正」するサード パーティ製のコントロールについては知っていますが、コンポーネントを追加せずにこのタスクを実行できるソリューションを探しています。

4

2 に答える 2

3

ListView はネイティブの Windows コントロールです。はい、背景画像をサポートしています。LVM_SETBKIMAGE メッセージが処理します。ただし、ボイラープレートの Winforms BackgroundImage サポートはサポートしていません。特に欠けているのは、Winforms が Control クラスに実装し、ControlStyles.UserPaint がオンになっているときに実装するプロパティである BackgroundImageLayout です。ネイティブの Windows コントロール用ではなく、自分自身をペイントします。

ListView の Winforms ラッパー クラスを作成した人物は、次善の策を講じました。彼は、ListView クラスに BackgroundImageTileという新しいプロパティを追加しました。ネイティブ Windows コントロール実装するレイアウト オプション。これにより、ネイティブ コントロールがサポートするレイアウト オプションが 2 つだけ残ります。タイルを張るか、張らないか。

その同じ男は、Winforms ラッパー クラスが合理的に動作するようにするために、いくつかのかなり英雄的なことを行いました。コードは、ネイティブ コントロールの癖を回避するためのハックでいっぱいです。お見事。Windows チームの担当者が Winforms の担当者の生活を楽にする余裕があれば、彼の生活はずっと楽だったでしょう。しかし、そのようには機能しません。ListView は Winforms よりもずっと長く使用されています。また、最初からうまく設計されていなかったため、Microsoft は当時、かなり大きな成長痛を抱えていました。

レガシ コード (WPF、Silverlight、WinRT) に依存しないようにルールを早送りして変更します。

于 2012-04-04T22:30:56.233 に答える
1

MSDNによると、「ListView.BackgroundImageLayout プロパティ」:

「API は .NET Framework インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。」

このプロパティは、ListView コントロールの背景画像のレイアウトには影響しないため、デザイナーや IntelliSense には表示されません。

背景画像を設定するには、 BackgroundImageプロパティを使用します。詳細については、 msdnを参照してください。

それは、あなたがそれでやろうとしている何か空想がない限りですか?

編集:ここの前のスレッドによると短い答えはあなたができないということです。=(

どうしても必要な場合は、ListView のサイズである空白の画像を作成してみてください。この画像にあなたの画像を追加し、真ん中の位置に追加してください。Bitmaps または Images の下に、これに似た性質のものがあるかもしれません。

于 2012-04-04T18:59:20.790 に答える