2012-11-29 15 views
14

Mam panel ze zdjęciami z wnętrza płótna. Dockpanel i wszelkie inne elementy (siatka itp.), Które umieszczam w płótnie, zajmują tylko minimalną wymaganą przestrzeń. Jak mogę rozciągnąć te elementy, aby wypełnić całe płótno?Rozciągnij elementy, aby wypełnić płótno

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

Dziękujemy!

Odpowiedz

31

Panel Canvas tak naprawdę nie obsługuje tego.

To bardzo proste - pozwala po prostu pozycjonować dzieci, używając górnego, dolnego, lewego i prawego, i zawsze zapewnia im przestrzeń, której potrzebują.

Zwykle używasz Grid zamiast tylko 1 kolumny i 1 rzędu.

Można jednak powiązać szerokość i wysokość DockPanel z szerokością i wysokością Canvas. W ten sposób DockPanel zawsze będzie wypełniać 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

Dziękujemy! Potrzebowałem go, aby nadal był Canvas dla mojej animacji: D – JosephGarrone

+0

Pracowałem z urokiem na problem, który miałem też:) –

+0

+ 1. dziękuję, że działało świetnie – ygoku

2

Co można zrobić, to:

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

owijając oba panele w siatce jak to można umieścić elementy, które cant do pozycji w stosunku do lewej, z góry itp w płótnie. Zarówno płótno, jak i panel dokowany wypełnią dostępną przestrzeń. Zauważ, że elementy w panelu dokowanym zostaną wyrenderowane nad elementami w obszarze roboczym, gdy zdefiniowany zostanie panel dokowany w XAML.

Zakładam, że napisany przez ciebie kod to pseudo kod, jeśli nie powinieneś po prostu usunąć płótno.