Стыковка/заполнение в WPF

Это похоже на такой простой вопрос, но я пробовал в течение часа и, похоже, не понял его.

Все, что я хочу сделать, это заполнить MainWindow Canvas. Я не смог найти какие-либо свойства, чтобы это разрешить, и единственный способ, которым я мог это сделать, - установить Canvas.Width/Height = MainWindow.Width/Height, но я должен был бы делать это каждый раз при изменении размера окна.

В WinForms стыковка элемента в родительском контейнере была легкой.

Ответ 1

Просто установите Canvas. HorizontalAlignment и VerticalAlignment "Растянуть". Это заставит Canvas заполнить пространство, доступное от него, содержащее элемент пользовательского интерфейса. Просто убедитесь, что НЕ задайте ширину/высоту явно.

В XAML это справедливо:

<Window ...Other window props... >
    <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <!-- Canvas items here... -->
    </Canvas>
</Window>

Ответ 2

В WPF вы можете выполнить стыковку, разместив свои элементы внутри DockPanel и используя свойство Dock inherited. Однако, если вы хотите, чтобы все окно было холстом, просто сделайте так, чтобы содержимое Window было холстом, а не другой вид панели:

<Window ...>
    <Canvas>
        <!-- blah blah -->
    </Canvas>
</Window>

Ответ 3

поместите это для ширины и высоты холста в xaml.

Width="{Binding Path=ActualWidth, ElementName=Window1}"
Height="{Binding Path=ActualHeight, ElementName=Window1}"

он должен измениться соответственно при изменении размера окна

Ответ 4

Nevermind, кажется, вам нужно добавить DockPanel:

<DockPanel Name="dockPanel1">
    <Canvas Name="canvas1" Background="White"></Canvas>
</DockPanel>