Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684

    c# dynamically TextBlock

    Buongiorno a tutti...

    Vorrei creare in una grid una matrice di TextBlock dinamicamente...

    Il codice che ho usato è il seguente:

    codice:
                TextBlock[,] Matrice = new TextBlock[Globals.NumberCell, Globals.NumberCell];
    
                for (int xx = 0; xx < Globals.NumberCell; xx++)
                {
    
                    for (int yy = 0; yy < Globals.NumberCell; yy++)
                    {
                            Matrice[xx,yy].Height = 100;
                            Matrice[xx,yy].Width = 100;
                            Matrice[xx,yy].Name = "tb_" + xx + yy
                    }
                }
    Il problema è...ora come lo aggiungo alla grid...nelle proprietà non c'è add o simili...
    è possibile fare una cosa del genere?!?

    Grazie
    Oppa

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Ciao,
    devi usare la proprietà Children della grid, li trovi il metodo Add.

    tieni presente che quando vai ad aggiungere elementi nella grid, questi non vengono "accodati" automaticamente, ma vengono posizionate secondo il margin che di default sta a 0, quindi se non impostato diversamente, ti ritrovi tutti i textblock sovapposti.

    se non è l'effetto voluto, dovresti o impostare il margin dei textblock, oppure stabilire le righe e colonne (della grid) ed assegnarne gli indici ai textblock.

    altra soluzione potrebbe essere quella di usare gli stackPanel (accodano automaticamente) o i dockPanel.

  3. #3
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    wow grazie mille....

    secondo te qual'è la soluzione più "pulita"?

    codice:
                            Matrice[xx, yy] = new TextBlock();
                            Matrice[xx, yy].Name = "tb_" + xx + yy;
                            Matrice[xx,yy].Height = 100;
                            Matrice[xx,yy].Width = 100;
                            Matrice[xx, yy].Margin = "10,100,0,0";
                          
                            DataGrid.Children.Add(Matrice[xx, yy]);
    Ma è anche possibile associare dinamicamente l'"on clik"?

    Grazie!
    Oppa

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    aspetta... hai parlato di grid non di datagrid...
    il grid è un contenitore, il datagrid è il controllo avanzato...

    giustamente fai bene ad usare un datagrid, di solito è quello che si sposa meglio con la magior parte delle esigenze, ma non si usa in questo modo, poi ovviamente dipende da cosa devi fare esattamente.

    prova a spiegare

  5. #5
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    ;( si vede che ho iniziato da due giorni?!?!

    Vorrei sviluppare una app per windows phone...e in sostanza quello che vorrei creare è una matrice dinamica XX*YY di TextBlock (o di qualsiasi cosa di compatibile) e associare ad ogni elemento della matrice un evento click.

    E ad esempio al click sulla cella [1,1] scivere 1-1 su un text se si clicca sulla cella [5,5] scrivere 5-5 su una text!

    codice:
     TextBlock[,] Matrice = new TextBlock[Globals.NumberCell, Globals.NumberCell];
    
                for (int xx = 0; xx < Globals.NumberCell; xx++)
                {
                    
                    y = y + 100;
    
                    for (int yy = 0; yy < Globals.NumberCell; yy++)
                    {
                            x = x + 100;
    
                            Matrice[xx, yy] = new TextBlock();
                            Matrice[xx, yy].Name = "tb_" + xx + yy;
                            Matrice[xx, yy].Height = 100;
                            Matrice[xx, yy].Width = 100;
                          
                            DataGrid.Children.Add(Matrice[xx, yy]);           
                    }
                }
    Grazie!
    Oppa

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    diciamo che sarebbe meglio creare un controllo che ti faccia da datagrid (visto che per wp7 non c'è) ed eventualmente usarlo in binding per evitare di mischiare logica e interfaccia, comunque :
    codice:
    ListBox listBox = new ListBox();
                for (int xx = 0; xx < Globals.NumberCell; xx++)
                {
                    int y=0;
                    int x=0;
                    StackPanel st = new StackPanel();
                    st.Orientation = System.Windows.Controls.Orientation.Horizontal;
                    y = y + 100;
                    for (int yy = 0; yy < Globals.NumberCell; yy++)
                    {
                        x = x + 100;
                        TextBlock tb = new TextBlock();
                        tb.Height = 100;
                        tb.Width = 100;
                        tb.Text = string.Format("{0}X{1}",xx,yy);
                        tb.MouseLeftButtonUp+=new MouseButtonEventHandler(tb_MouseLeftButtonUp);//dovrebbe corrispondere al tocco sul device
                        tb.Name = string.Format("tb_{0}_{1}",xx,yy);
                        st.Children.Add(tb);
                    }
    
                    listBox.Items.Add(st);
                }

  7. #7
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    Grazie mille...



    Sto approfondendo un pò...!
    Oppa

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da power83
    Grazie mille...



    Sto approfondendo un pò...!
    Figurati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.