web-dev-qa-db-ja.com

アイテムを伸ばしてキャンバスを埋める

キャンバス内にアイテムを含むドックパネルがあります。ドックパネルとキャンバス内に配置するその他のアイテム(グリッドなど)は、必要最小限のスペースしか占有しません。これらのアイテムをストレッチしてキャンバス全体を埋めるにはどうすればよいですか?

    <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>

ありがとうございました!

16
JosephGarrone

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}">
34
Peter Hansen

あなたができることは:

<Grid>
    <Canvas x:Name="InfoCanvas">
        <!--Elements with canvas layout here-->
    </Canvas>
    <DockPanel x:Name="ReferenceInfo">
        <!--Elements with dockpanel layout here-->
    </DockPanel>
</Grid>

このように両方のパネルをグリッドでラップすることにより、キャンバスの左、上などに対して配置できない要素を配置できます。キャンバスとドックパネルの両方が利用可能なスペースを埋めます。ドックパネルがxamlで定義された後、ドックパネルの要素がキャンバスの要素の上にレンダリングされることに注意してください。

投稿したコードは疑似コードだと思いますが、そうでない場合はキャンバスを削除するだけです。

3
Johan Larsson