2009-04-22 6 views
1

Je suis très nouveau à Silverlight alors je m'excuse si cette question est évidente, mais je veux créer quelque chose de similaire à un tableau HTML qui peut avoir un nombre quelconque de lignes de 1 à x.Silverlight table de taille dynamique

J'ai besoin que la table croisse avec le nombre de lignes qui y sont ajoutées. De plus, je voudrais être en mesure de définir la largeur et la hauteur de la table dans son ensemble et avoir tout le texte dans chaque ligne pour dynamiquement redimensionner de manière appropriée.

À quoi ressemblerait le XAML pour quelque chose comme ça?

Cheers, Chris.

EDIT:

Merci pour les réponses, il semble que ce que je veux est un mélange de toutes les suggestions faites pour archiver ceci:

<Grid x:Name="ExampleGrid" Height="150" Width="300" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Viewbox Stretch="Fill" Grid.Row="0"> 
    <!-- Two column header --> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="Text One" Height="Auto" /> 
     <TextBlock Text="Text One" Height="Auto" /> 
    </StackPanel> 
    </Viewbox> 
    <Viewbox Stretch="Fill" Grid.Row="1"> 
    <TextBlock Text="Text Two" Height="Auto" /> 
    </Viewbox> 
    <Viewbox Stretch="Fill" Grid.Row="2"> 
    <TextBlock Text="Text Three" Height="Auto"/> 
    </Viewbox> 

Répondre

1

La première question qui vient à l'esprit est de savoir quand vous ajouteriez les lignes. Est-ce purement le temps du design? ou est-ce une condition d'exécution?

<Grid x:Name="ExampleGrid" Height="20" Width="200"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <TextBlock Text="Text One" Height="Auto" Grid.Row="0"/> 
    <TextBlock Text="Text Two" Height="Auto" Grid.Row="1"/> 
    <TextBlock Text="Text Three" Height="Auto" Grid.Row="2"/> 
</Grid> 

Cela créera une grille à trois lignes. Avec chaque grille recevant une part égale de l'espace disponible. (l'étoile en hauteur signifie fractionner l'espace disponible)

Si vous deviez ajouter une ligne à l'exécution.

ExampleGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) }); 

TextBlock block = new TextBlock() { Text = "Text Four" }; 
Grid.SetRow(block, 3); 

ExampleGrid.Children.Add(block); 

Le problème vient d'obtenir le texte lui-même à l'échelle vers le haut ou vers le bas pour adapter à l'espace disponible, et je ne suis pas sûr de savoir comment faire.

0

Je suis assez nouveau XAML moi-même, mais je suis assez sûr que vous n'avez pas besoin de faire quoi que ce soit dans XAML lui-même, mais plutôt dans le code. XAML est compilé en BAML (binaire) et votre code fonctionne avec les objets .NET définis dans le BAML, le XAML lui-même est juste un langage de temps de conception lisible par l'homme.

Qu'est-ce que vous êtes probablement après ajoute programmitically définitions de ligne, ce qui serait quelque chose le long des lignes de:

Grid g = this.Grid1 
g.RowDefinitions.Add(new RowDefinition) 

Bien sûr, vous pouvez faire une boucle pour continuer à ajouter RowDefinitions à la collection RowDefinitions, et également définir d'autres propriétés sur le RowDefinition avant ou après les ajouter à la grille

+0

La grille doit être utilisée pour la mise en page et non pour les données dynamiques. Mais, il est difficile de dire par sa question ce qu'il cherche vraiment. –

+0

un bon point, monsieur! – STW

2

Vous devriez probablement dans la zone de liste (ou DataGrid)

Voici une Silverlight bon tutoriel par Scott GU:

http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx

+0

Je pense que je vous comprends, donc je pourrais utiliser un ListBox pour chaque ligne et dans la boîte de liste utiliser une grille modèle pour les colonnes dont j'ai besoin. Est-ce que cela satisfera également mon besoin de redimensionner tous les éléments de la liste si je donne à la listbox un ensemble hauteur/largeur? – Owen

1

Vous souhaitez utiliser une grille dans votre fichier XAML. Voici un exemple: Une fois que vous avez défini la grille, vous pouvez facilement et supprimer les colonnes et les lignes que le message précédent dit. Définir l'alignement sur Stretch permettra à la grille de redimensionner avec le navigateur.

<Grid x:Name="grdName"HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 

Une chose que je trouve un peu difficile à comprendre est comment CHANGEA ligne ou une colonne et réglez à la largeur automatique. Voici un exemple de cela.

Dim objCol Comme ColumnDefinition = Nothing

objCol = grdName.ColumnDefinitions.Item (0) objCol.Width = New GridLength (Double.NaN)

Si vous souhaitez définir la largeur à tout autre valeur juste mettre le numéro à la place de la Double.NaN.

Oh tout ce code est VB.net.

Questions connexes