キャンバス内にアイテムを含むドックパネルがあります。ドックパネルとキャンバス内に配置するその他のアイテム(グリッドなど)は、必要最小限のスペースしか占有しません。これらのアイテムをストレッチしてキャンバス全体を埋めるにはどうすればよいですか?
<Canvas x:Name="InfoCanvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="72,53,0,0">
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="ReferenceInfo" Canvas.Left="0" Canvas.Top="0">
<TextBox x:Name="ReferenceAuthor" GotFocus="FieldEnter" LostFocus="FieldLeave" FontSize="16" FontFamily="Segoe UI Light" Text="Author" Foreground="Gray" Background="Transparent" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,2,0,2"/>
<TextBox x:Name="ReferenceTitle" GotFocus="FieldEnter" LostFocus="FieldLeave" FontSize="16" FontFamily="Segoe UI Light" Text="Title" Foreground="Gray" Background="Transparent" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,2,0,2"/>
<TextBox x:Name="ReferenceDate" GotFocus="FieldEnter" LostFocus="FieldLeave" FontSize="16" FontFamily="Segoe UI Light" Text="Date" Foreground="Gray" Background="Transparent" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,2,0,2"/>
</DockPanel>
</Canvas>
ありがとうございました!
Canvas
パネルは実際にはそれをサポートしていません。
これは非常に基本的なことです。上、下、左、右を使用して子供を絶対に配置することができ、常に必要なスペースだけを子供に提供します。
したがって、通常は、代わりに1列と1行のGrid
を使用します。
ただし、DockPanel
の幅と高さをCanvas
の幅と高さにバインドできます。そうすれば、DockPanel
は常にCanvas
を埋めます。
<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Margin="0,0,0,0" x:Name="ReferenceInfo" Canvas.Left="0" Canvas.Top="0"
Width="{Binding ActualWidth, ElementName=InfoCanvas}"
Height="{Binding ActualHeight, ElementName=InfoCanvas}">
あなたができることは:
<Grid>
<Canvas x:Name="InfoCanvas">
<!--Elements with canvas layout here-->
</Canvas>
<DockPanel x:Name="ReferenceInfo">
<!--Elements with dockpanel layout here-->
</DockPanel>
</Grid>
このように両方のパネルをグリッドでラップすることにより、キャンバスの左、上などに対して配置できない要素を配置できます。キャンバスとドックパネルの両方が利用可能なスペースを埋めます。ドックパネルがxamlで定義された後、ドックパネルの要素がキャンバスの要素の上にレンダリングされることに注意してください。
投稿したコードは疑似コードだと思いますが、そうでない場合はキャンバスを削除するだけです。