2011-01-12 5 views
10

Это похоже на такой простой вопрос, но я пробовал в течение часа и не могу понять.Стыковка/заполнение в WPF

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

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

ответ

20

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

В XAML, это просто:

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

И убедитесь, что вы не установили ширина/высота свойства явно на вашем холсте. – RQDQ

+0

Это работает. Я знаю, что я пробовал это раньше, и он не работал, но кто знает. Благодарю. --Edit: Я, вероятно, установил ширину/высоту. – Eric

+0

Лучший. Не зависит ни от чего другого. –

2

положить это для ширины холста и высоты в XAML.

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

он должен изменить соответствующим образом при изменении размеров окна

+2

Как это лучше? Я думаю, что ответ Эрика более прост/прочен, чем такой привязкой. – RQDQ

0

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

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

Есть много способов сделать это. Это немного перебор, но будет отлично работать. – RQDQ

+2

Совет. Не оставляйте эти автогенерированные имена на своих элементах управления. Дайте им значащие имена. Вы будете счастливее, когда вам не нужно будет проверять, находится ли номер номерной доски в textBox23 или textBox17. Еще лучше, не называйте их вообще, если вам не нужно ссылаться на них: имена WPF являются необязательными. –

+0

@Martinho, я не знал, что имена были необязательными. Это удобно. Благодарю. – Eric

3

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

<Window ...> 
    <Canvas> 
     <!-- blah blah --> 
    </Canvas> 
</Window> 
Смежные вопросы