拉伸项目以填充画布

Jos*_*one 16 wpf controls components canvas

我有一个带有Canvas内部项目的Dockpanel.Dockpanel和我放置在Canvas中的任何其他项(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>
Run Code Online (Sandbox Code Playgroud)

谢谢!

Pet*_*sen 33

Canvas小组并不真正支持这一点.

这是非常基本的 - 它只允许你通过使用上,下,左和右绝对定位孩子,它总是给他们所需的空间.

所以通常你Grid只使用1列和1行.

你可以的宽度和高度.然而绑定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}">
Run Code Online (Sandbox Code Playgroud)


Joh*_*son 5

你能做的是:

<Grid>
    <Canvas x:Name="InfoCanvas">
        <!--Elements with canvas layout here-->
    </Canvas>
    <DockPanel x:Name="ReferenceInfo">
        <!--Elements with dockpanel layout here-->
    </DockPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)

通过像这样将两个面板包裹在网格中,您可以放置​​无法相对于画布中的左侧、顶部等定位的元素。画布和停靠面板都将填充可用空间。请注意,当在 xaml 中定义后,dockpanel 中的元素将呈现在画布中的元素上方。

我假设您发布的代码是伪代码,如果不是,您应该删除画布。