2009-02-17 4 views
6

Je commence à peine sur Silverlight en utilisant la version 2.0. Je voulais montrer quelques grilles de données sur la page et je me suis bien débrouillé en les déposant dans une cellule de la grille. Je pensais alors que je voudrais essayer d'ajouter un séparateur de grille en utilisant le balisage suivant:Silverlight Grid Splitter Comportement inattendu

<UserControl xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightApplication1.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Loaded="UserControl_Loaded"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <basics:GridSplitter Grid.RowSpan="2" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Width="5" VerticalAlignment="Stretch" ></basics:GridSplitter> 
     <data:DataGrid Name="TLGrid" Grid.Row="0" Grid.Column="0"> 
     </data:DataGrid> 
     <data:DataGrid Name="TRGrid" Grid.Row="0" Grid.Column="2"> 
     </data:DataGrid> 
     <data:DataGrid Name="BLGrid" Grid.Row="1" Grid.Column="0"> 
     </data:DataGrid> 
     <data:DataGrid Name="BRGrid" Grid.Row="1" Grid.Column="2"> 
     </data:DataGrid> 
    </Grid> 
</UserControl> 

Je pensais pouvoir faire glisser le séparateur autour de redimensionner les deux autres colonnes. Lorsque je fais glisser la barre, les deux autres colonnes se rétrécissent. Quelqu'un peut-il expliquer pourquoi?

Répondre

7

Vous n'avez pas besoin de la colonne du milieu pour le séparateur de grille. Le Gridsplitter se liera au bord droit de la colonne 0 si vous placez le séparateur dans la colonne 0. Vous pouvez ajouter une petite marge aux grilles dans le côté gauche pour ne pas perdre les 5 derniers pixels.

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*"/> 
     <!--<ColumnDefinition Width="Auto"/>--> 
     <ColumnDefinition Width="1*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 

    <data:DataGrid Name="TLGrid" Grid.Row="0" Grid.Column="0" /> 
    <data:DataGrid Name="BLGrid" Grid.Row="1" Grid.Column="0"/> 

    <!-- Moved the grid splitter to column 0 --> 
    <basics:GridSplitter Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" Width="5" /> 

    <data:DataGrid Name="TRGrid" Grid.Row="0" Grid.Column="2" /> 
    <data:DataGrid Name="BRGrid" Grid.Row="1" Grid.Column="2" />   
</Grid> 
+0

Merci, cela fonctionne parfaitement. –

8

La raison pour laquelle les cellules redimensionnent de la manière que vous avez vécu est en baisse aux ColumnDefinition valeurs et la HorizontalAlignment du GridSplitter. Étant donné que vous n'avez pas spécifié de hauteur, la largeur des colonnes est définie par défaut sur Star. Cela signifie qu'ils ont un espacement égal. Le GridSplitterHorizontalAlignment spécifie ensuite la direction dans laquelle il est redimensionné. Si vous le centrez ou l'étirez, les deux côtés seront redimensionnés, mais si vous l'alignez sur un bord ou sur l'autre, il redimensionnera uniquement ce bord, mais comme les cellules partagent un espace égal, les deux côtés rétrécissent au lieu d'un seul.

Bien que la réponse acceptée offre une approche alternative pour que cela fonctionne, elle n'explique pas réellement pourquoi le problème se produit. Il est parfaitement acceptable de placer un séparateur dans ses propres cellules - en fait, il est souvent recommandé.

+0

Merci pour l'explication. Il a résolu mon problème aussi. – beaudetious

+0

@beaudetious: Je suis content d'avoir pu aider. :) –