22

Canvas 内にアイテムを含む Dockpanel があります。Canvas 内に配置する Dockpanel とその他のアイテム (Grid など) は、必要最小限のスペースしか占有しません。これらのアイテムを引き伸ばしてキャンバス全体を埋めるにはどうすればよいですか?

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

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

4

2 に答える 2

39

パネルは実際にはそれCanvasをサポートしていません。

これは非常に基本的なもので、上、下、左、右を使用して子を完全に配置でき、常に必要なスペースだけを子供に与えることができます。

したがって、通常は、Grid代わりに 1 列と 1 行だけの a を使用します。

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}">
于 2012-11-29T08:08:22.410 に答える
5

あなたができることは次のとおりです。

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

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

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

于 2016-03-18T19:50:44.233 に答える