2012-11-29 7 views
14

Ich habe ein Dockpanel mit Elementen in einem Canvas. Das Dockpanel und alle anderen Elemente (Grid usw.), die ich im Canvas-Bereich platziere, nehmen nur ihren minimalen Platzbedarf ein. Wie strecke ich diese Elemente, um den gesamten Canvas zu füllen?Stretchartikel zum Füllen von Leinwand

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

Vielen Dank!

Antwort

31

Das Canvas Panel unterstützt das nicht wirklich.

Es ist sehr einfach - es erlaubt Ihnen, Kinder absolut zu positionieren, indem Sie Oben, Unten, Links und Rechts verwenden, und es gibt ihnen immer genau den Raum, den sie brauchen.

So würden Sie normalerweise eine Grid mit nur 1 Spalte und 1 Zeile stattdessen verwenden.

Sie können jedoch die Breite und Höhe des DockPanel an die Breite und Höhe des Canvas binden. Auf diese Weise füllt die DockPanel immer die 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}"> 
+0

Vielen Dank! Ich brauchte es, um noch ein Canvas für meine Animation zu sein: D – JosephGarrone

+0

Arbeitete ein Charme für ein Problem, das ich auch hatte:) –

+0

+ 1..thanks es funktionierte großartig – ygoku

2

Was können Sie tun, ist:

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

Durch die beiden Platten in einem Raster wie das Umwickeln Sie Elemente platzieren können, die Sie kann nicht nach links, oben usw. in der Leinwand relativ zu positionieren. Sowohl der Canvas als auch der Dockpanel füllen den verfügbaren Platz. Beachten Sie, dass die Elemente im Dockpanel über den Elementen im Canvas gerendert werden, wenn das Dockpanel in xaml definiert ist.

Ich gehe davon aus, dass der Code, den Sie gepostet haben, Pseudocode ist, wenn nicht, sollten Sie nur die Zeichenfläche entfernen.

Verwandte Themen