2012-02-27 9 views
4

私は若干WPFに慣れていますが、うまくいけば私はここに世界を求めているわけではありませんが、私は以下のようなものを実装する方法について助言/指示を探しています。自動レイアウトコントロールの数を増やす

MainWindowにはN個のボタンが含まれています。各Buttonは、異なるデータセット(すなわち、印刷画像1、印刷画像2、...、印刷画像N)に対して同じ動作を実行する。私は以下のように自動的にボタンをレイアウトするために私の窓が欲しい:ボタンの数が増えると、レイアウトが自動的に楽しいやり方で調整する方法

enter image description here

に注意してください。最大6まで、そしてそれはボタンをシャッフルするために水平スクロールを提供します。

私は<Grid>のコントロールがこれを提供する方法かもしれないと思っていますが、私は自動レイアウトを得る方法が失われています。

私は、WPFのデータバインディングのパワーを知り、理想的にはボタンの情報(表示テキスト、グラフィックなど)は自動的に観測可能なコレクションにバインドされるので、コレクションにボタンを挿入するとUI自動的に更新されます。逆に、各ボタンをクリックするとジェネリックハンドラが必要になりますボタン5は、このすべての追加情報(印刷する画像のファイル名)を持つコレクションの5番目の要素にマップされます。

すべてがうまくいくと思いますが、やはり実装では少し失われています。

答えて

0

カスタムPanelクラスを作成して、MeasureOverrideとArrangeOverrideをオーバーライドして、必要なレイアウトを実現する必要があると思います。これをチェックしてください(非常に簡単)tutorial

1

Allonymが言ったように、最もカスタマイズ可能な方法は、このために新しいカスタムPanelを作成することです。 IMHO、UniformGridを使用してこれを実現し、バインディングとコンバーターで少し微調整することもできます。それはレイアウトのためのものです。

あなたの2番目の質問については、ItemsControlを使用するのが最善の方法だと思います。新しいPanel(またはUniformGrid)をItemsPanelとして渡すことができます。また、ボタンを内部に持つDataTemplateを作成し、そのCommandプロパティをのDataTemplate(=リストの現在の項目)というパラメータとして1つのコマンド(=汎用ハンドラ)にバインドすることができます。この部分はレイアウトよりも簡単です。

助けがありますか?

アントワーヌ

関連する問題