2011-01-12 15 views
10

To wydaje się proste pytanie, ale próbowałem przez godzinę i nie mogę tego zrozumieć.Dokowanie/Wypełnianie w WPF

Wszystko, co chcę zrobić, to wypełnić MainWindow płótnem. Nie mogłem znaleźć żadnych właściwości, które by na to pozwoliły, a jedynym sposobem, w jaki mógłbym to zrobić, było ustawienie Canvas.Width/Height = MainWindow.Width/Height, ale musiałbym to zrobić za każdym razem, gdy zmieni się rozmiar okna.

W dokowaniu WinForms element w kontenerze nadrzędnym był łatwy.

Odpowiedz

20

Wystarczy ustawić płótno. HorizontalAlignment i VerticalAlignment na "Rozciągnięcie". Spowoduje to wypełnienie obszaru roboczego przez obszar roboczy z elementu zawierającego element interfejsu użytkownika. Upewnij się, że NIE podano wyraźnie szerokości/wysokości.

w XAML, to tylko:

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

Upewnij się tylko, że nie ustawiłeś szerokości/wysokości właściwości jawnie na twoim płótnie. – RQDQ

+0

To działa. Wiem, że wypróbowałem go wcześniej i nie działało, ale kto wie. Dzięki. --Edit: Prawdopodobnie ustawiłem szerokość/wysokość. – Eric

+0

Najlepsze. Nie zależy od niczego innego. –

2

umieścić to na swoim płótnie szerokości i wysokości w XAML.

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

powinna ona odpowiednio zmienić podczas zmiany rozmiaru okna

+2

Jak to jest lepsze? Sądzę, że odpowiedź Erica jest prostsza/solidniejsza niż ten rodzaj wiązania. – RQDQ

0

Nevermind, wydaje się, trzeba dodać DockPanel:

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

Istnieje wiele sposobów, aby to zrobić. Ten jest nieco przesadzony, ale zadziała dobrze. – RQDQ

+2

Wskazówka: nie zostawiaj tych automatycznie generowanych nazw w kontrolkach. Nadaj im znaczące nazwy. Będziesz szczęśliwszy, gdy nie będziesz musiał sprawdzać, czy numer tablicy rejestracyjnej znajduje się w textBox23 lub textBox17. Co więcej, nie wymieniaj ich w ogóle, jeśli nie musisz się do nich odnosić: w nazwach WPF są opcjonalne. –

+0

@Martinho, nie wiedziałem nazwy były opcjonalne. To jest wygodne. Dzięki. – Eric

3

W WPF można zrobić dokowanie umieszczając przedmioty Wewnątrz DockPanel i korzystanie z odziedziczonej właściwości Dock. Jeśli jednak chcesz, aby całe okno było płótnem, po prostu ustaw tak, aby zawartość okna była płótnem, a nie innym panelem:

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