2011-01-05 6 views
1

Im nouveau dans WPF & Xaml Je ne sais pas comment ancrer comment accoster ... Sur ce gris écran est statusBar est arrimé, mais la grille et le menu ne sont pas tous les composants sont en toile. Ce est XAMLproblème WPF et XAML

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="WpfApplication6.MainWindow" 
x:Name="Window" 
Title="MainWindow" 
Width="640" Height="480"> 

<Grid x:Name="LayoutRoot"> 
    <Canvas> 
     <StackPanel Height="40" Width="624" VerticalAlignment="Top" HorizontalAlignment="Center"> 
      <Menu Height="39" Margin="1,0,0,0"> 
       <Menu.Background> 
        <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
         <GradientStop Color="#FFF6F6F6" Offset="0.25"/> 
         <GradientStop Color="#FFEAE8E8" Offset="0.25"/> 
         <GradientStop Color="#FFDCD9D9" Offset="0.8"/> 
         <GradientStop Color="White" Offset="1"/> 
        </LinearGradientBrush> 
       </Menu.Background> 
      </Menu> 
     </StackPanel> 
     <StackPanel Height="356" Canvas.Top="44" Width="161" HorizontalAlignment="Left"> 
      <Expander Header="Expander" Height="107"> 
       <Grid Background="#FFE5E5E5"/> 
      </Expander> 
     </StackPanel> 
     <StackPanel Height="360" Canvas.Left="161" Canvas.Top="40" Width="463"> 
      <DataGrid Height="361"/> 
     </StackPanel> 
    </Canvas> 
    <StackPanel Height="40" Margin="-1,0,0,0" VerticalAlignment="Bottom"> 
     <StatusBar Height="40" Background="#FF897676"/> 
    </StackPanel> 
</Grid> 

alt text

+0

Je ne suis pas sûr de comprendre votre question. Où voulez-vous que la grille et le menu soient situés sur l'écran? – ChrisNel52

Répondre

5

Vous ne voulez pas que ces choses soient placés dans un Canvas. Je ne suis pas sûr d'avoir déjà utilisé un Canvas dans WPF.

DockPanel est votre ami, et voilà comment cela fonctionne:

  • Chaque contrôle dans le DockPanel obtient une DockPanel.Dock propriété attachée: Gauche, Haut, Droite, Bas ou
  • Quoi, pas de remplissage? Ceci est important: vous pouvez avoir un contrôle pour remplir l'espace disponible, et ce sera le dernier contrôle déclaré dans le. Donc, même si vous voulez que le contrôle "fill" soit tout en haut, vous en faites le dernier élément du DockPanel et définissez DockPanel.Dock="Top".
  • À l'exception du dernier élément "Remplir", les autres qui ont le même paramètre Dock seront ancrés dans l'ordre dans lequel ils ont été déclarés.

À la base, DockPanel peut être utilisé comme StackPanel sauf qu'il remplira l'espace disponible.

+0

merci ... et il y a quelque chose de similaire à l'ancre? –

+0

@user Il n'y a pas d'ancre. Il y a un tas de différents types de panneaux, chacun avec sa propre façon de disposer ses enfants. Vous aurez juste besoin de vous familiariser avec eux (DockPanel, StackPanel, Grid, FlowLayoutPanel, etc.) et apprendre à appliquer le bon pour le bon effet. – Jay