Dynamiczne tworzenie kolumn i wierszy w Grid

0

Próbuję z code-behid w wpf tworzyć kolumny i wiersze do grida stworzone w xaml:

  <Grid Name="generalGrid">

    </Grid>
public MainWindow()
        {
            InitializeComponent();
            CreateGrid(3, 3);
       
            TextBlock txtBlock1 = new TextBlock();
            txtBlock1.Text = "Author Name";
            txtBlock1.FontSize = 14;
            txtBlock1.FontWeight = FontWeights.Bold;
            txtBlock1.Foreground = new SolidColorBrush(Colors.Green);
            txtBlock1.VerticalAlignment = VerticalAlignment.Top;
            AddControlToGrid(txtBlock1, 1, 1);


        }

        private void CreateGrid(int rows, int columns)
        {
            Grid grid = new Grid();
            grid = CreateColumns(grid, columns);
            grid = CreateRows(grid, rows);
            grid.Name = "generalGrid";
            grid.ShowGridLines = true;
            generalGrid = grid;
        }

        private Grid CreateColumns(Grid grid, int columns)
        {
            for (int i = 0; i < columns; i++)
            {
                ColumnDefinition columnDefinition = new ColumnDefinition();
                grid.ColumnDefinitions.Add(columnDefinition);
            }
            return grid;
        }

        private Grid CreateRows(Grid grid, int rows)
        {
            for (int i = 0; i < rows; i++)
            {
                RowDefinition columnDefinition = new RowDefinition();
                grid.RowDefinitions.Add(columnDefinition);
            }
            return grid;
        }

        private void AddControlToGrid(TextBlock obj, int row, int column)
        {
            //var obj = (UIElement)ui;
           
            Grid.SetColumn(obj,column);
            Grid.SetRow(obj, row);
            generalGrid.Children.Add(obj);
        }

        private void ClearChildrenGrid()
        {
            generalGrid.Children.Clear();
        }

Jednak nie wychodzi, kontrolka się nie dodaje. Co mogę robić źle?

0

nie odswiezyles widoku, dlatego nie widzisz zmian

czemu nie zrobic to wszystko w WPF?

0

Bo chcę w czasie działania zmieniać ilość kolumn/wierszy, więc dlatego piszę w code-behind, wydaje mi się to najrozsądniejsze do aplikacji, którą muszę napisać szybko, bez żadnych wzorców.

Mógłbyś napisać jak mam odświeżyć widok? Próbowałem przez metodę UpdateLayout, ale nic się nie zmieniło.

1
bloniak91 napisał(a):


        private void CreateGrid(int rows, int columns)
        {
            Grid grid = new Grid();
            grid = CreateColumns(grid, columns);
            grid = CreateRows(grid, rows);
            grid.Name = "generalGrid";
            grid.ShowGridLines = true;
            generalGrid = grid;
        }
 

Problem jest w linijce: generalGrid = grid; to zdecydowanie nie robi tego czego po tym oczekujesz, to nie podmieni Ci grida w widoku. zamiast tworzyc grida: Grid grid = new Grid();, po prostu się odwołuj do grida którego masz już w widoku po nazwie generalGrid,

 
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            CreateGrid(3, 3);

            TextBlock txtBlock1 = new TextBlock();
            txtBlock1.Text = "Author Name";
            txtBlock1.FontSize = 14;
            txtBlock1.FontWeight = FontWeights.Bold;
            txtBlock1.Foreground = new SolidColorBrush(Colors.Green);
            txtBlock1.VerticalAlignment = VerticalAlignment.Top;
            AddControlToGrid(txtBlock1, 1, 1);
        }

        private void CreateGrid(int rows, int columns)
        {          
            CreateColumns(generalGrid, columns);
            CreateRows(generalGrid, rows);          
            generalGrid.ShowGridLines = true;       
        }

        private void CreateColumns(Grid grid, int columns)
        {
            for (int i = 0; i < columns; i++)
            {
                ColumnDefinition columnDefinition = new ColumnDefinition();
                grid.ColumnDefinitions.Add(columnDefinition);
            }
          
        }

        private void CreateRows(Grid grid, int rows)
        {
            for (int i = 0; i < rows; i++)
            {
                RowDefinition columnDefinition = new RowDefinition();
                grid.RowDefinitions.Add(columnDefinition);
            }          
        }

        private void AddControlToGrid(TextBlock obj, int row, int column)
        {
            Grid.SetColumn(obj, column);
            Grid.SetRow(obj, row);
            generalGrid.Children.Add(obj);
        }

        private void ClearChildrenGrid()
        {
            generalGrid.Children.Clear();
        }
    }
0

Dzięki za podpowiedź!:) działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1