2011-01-12 26 views
10

これはとても簡単な質問のようですが、私は1時間試してみることができません。WPFでのドッキング/塗りつぶし

私がしたいのは、MainWindowをCanvasで塗りつぶすだけです。私はこれを可能にするプロパティを見つけることができませんでした。私はそれを行うために考えることができる唯一の方法は、Canvas.Width/Height = MainWindow.Width/Heightを設定することですが、私はウィンドウがサイズ変更されるたびに行う必要があります。

WinFormsのドッキングでは、親コンテナ内の要素は簡単でした。

答えて

20

キャンバスを設定するだけです。 HorizontalAlignmentおよびVerticalAlignmentを「ストレッチ」に設定します。これにより、キャンバスはUIエレメントを含むスペースから空き領域を埋めるようになります。幅/高さを明示的に指定しないでください。 XAMLで

、これは単にある:

<Window ...Other window props... > 
    <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <!-- Canvas items here... --> 
    </Canvas> 
</Window> 
+3

そして、ちょうどあなたが幅/高さを設定していないことを確認してください:あなたはキャンバスであることを全体のウィンドウをしたい場合はウィンドウの内容は、パネルの他の種類のキャンバスではなく、のでしかし、ただそれを作りますプロパティを明示的にキャンバスに表示します。 – RQDQ

+0

これは動作します。私は早くそれを試したことが分かっていて、うまくいきませんでしたが、誰が知っています。ありがとう。 - 編集:おそらく幅/高さを設定します。 – Eric

+0

ベスト。他には依存しない –

2

XAMLでキャンバスの幅と高さのためにこれを置きます。

Width="{Binding Path=ActualWidth, ElementName=Window1}" 
Height="{Binding Path=ActualHeight, ElementName=Window1}" 

それはあなたが

+2

これはどのように優れていますか?エリックの答えは、この種のバインディングを行うより簡単で堅牢だと思います。 – RQDQ

0

ネヴァーマインドウィンドウのサイズを変更する場合、あなたがDockPanelを追加する必要がありそうです応じて変更する必要があります。

WPFで
<DockPanel Name="dockPanel1"> 
    <Canvas Name="canvas1" Background="White"></Canvas> 
</DockPanel> 
+0

これを実行する方法はたくさんあります。これは少し過剰ですが、うまく動作します。 – RQDQ

+2

ヒント:これらの自動生成された名前をコントロールに残さないでください。意味のある名前を付けてください。ナンバープレート番号がtextBox23かtextBox17であるかどうかを確認する必要がないときは、もっと楽になります。あなたがそれらを参照する必要がない場合、WPFの名前ではオプションであることは、まだ良いです。 –

+0

@Martinho、私は名前がオプションであることを知らなかった。それは便利です。ありがとう。 – Eric

3

あなたが内側にあなたの商品を置くことでドッキングを行うことができますDockPanelとDock継承プロパティを使用します。

<Window ...> 
    <Canvas> 
     <!-- blah blah --> 
    </Canvas> 
</Window> 
関連する問題