Натяжные элементы для заполнения холста - программирование
Подтвердить что ты не робот

Натяжные элементы для заполнения холста

У меня есть Dockpanel с элементами внутри Canvas. Докпанель и любые другие предметы (сетка и т.д.), Которые я размещаю внутри холста, занимают только минимальное требуемое пространство. Как растянуть эти элементы, чтобы заполнить весь холст?

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

Спасибо!

4b9b3361

Ответ 1

Панель Canvas на самом деле не поддерживает это.

Это очень просто - он просто позволяет вам позиционировать детей абсолютно, используя Top, Bottom, Left и Right, и он всегда дает им просто необходимое им пространство.

Итак, вы обычно используете Grid только с одним столбцом и 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}">

Ответ 2

Что вы можете сделать:

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

Обернув обе панели в такой сетке, вы можете поместить элементы, которые вы не можете позиционировать относительно левого, верхнего и т.д. на холсте. Как холст, так и док-панель будут заполнять свободное пространство. Обратите внимание, что элементы в док-панели будут отображаться над элементами в холсте, когда док-панель будет определена после в xaml.

Я предполагаю, что код, который вы отправили, является псевдокодом, если вы не должны просто удалить холст.