Натяжные элементы для заполнения холста
У меня есть 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>
Спасибо!
Ответы
Ответ 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.
Я предполагаю, что код, который вы отправили, является псевдокодом, если вы не должны просто удалить холст.