拉伸的项目,以填补画布(Stretch items to fill canvas)

2019-07-04 05:49发布

我有一个DockPanel中有帆布内的物品。 在DockPanel中以及其他任何物品(电网等),我在画布内,仅占其所需的最小空间。 如何伸展这些项目,填补了整个画布?

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

谢谢!

Answer 1:

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


Answer 2:

你可以做的是:

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

通过这样的网格包裹两个面板,你可以将你不能相对于画布左侧,顶部等定位元素。 无论是画布和DockPanel中会填充可用空间。 注意,在DockPanel中的元素将在画布中的元素时,DockPanel中在XAML后上述定义来呈现。

我假设你贴是伪代码的代码,如果你不应该只是删除画布。



文章来源: Stretch items to fill canvas