Question

Je dois écrire un programme C # WPF afin de permettre à l'utilisateur de modifier individuellement la largeur et la hauteur d'une grille à l'aide de la souris. Après une certaine lecture, j'ai découvert que le WPF comptabilise le contrôle de la grille deplitter, ce qui semble être une solution possible pour mon problème. Jusqu'à présent, c'est mon approche:

private const int NumCols = 5;
    private const int NumRows = 7;

    private void CreateDynamicWPFGrid()
    {
        // Create the Grid
        var dynamicGrid = new Grid();

        for (int i = 0; i < NumCols - 1; ++i )
        {
            // Define 2 * (NumCols - 1) columns. For every two columns, the first one will hold a label
            // whereas the second one will hold a vertical splitter.

            var gridColDefA = new ColumnDefinition();
            // The gridColDefB is for the splitter.
            var gridColDefB = new ColumnDefinition();
            gridColDefB.Width = new GridLength(1, GridUnitType.Auto);

            dynamicGrid.ColumnDefinitions.Add(gridColDefA);
            dynamicGrid.ColumnDefinitions.Add(gridColDefB);
        }
        {
            // The last column only needs a cell for holding a label. No splitter whatsoever.
            var gridColDef = new ColumnDefinition();
            dynamicGrid.ColumnDefinitions.Add(gridColDef);
        }

        for (int j = 0; j < NumRows - 1; ++j)
        {
            var gridRowDefA = new RowDefinition();
            var gridRowDefB = new RowDefinition();
            // The gridRowDefB is for the splitter.
            gridRowDefB.Height = new GridLength(1, GridUnitType.Auto);

            dynamicGrid.RowDefinitions.Add(gridRowDefA);
            dynamicGrid.RowDefinitions.Add(gridRowDefB);
        }
        {
            // The last row only needs a cell for holding a label. No splitter whatsoever.
            var gridRowDef = new RowDefinition();
            dynamicGrid.RowDefinitions.Add(gridRowDef);
        }

        for (int i = 0; i < NumCols - 1; ++i )
        {
            for(int j = 0; j < NumRows - 1; ++j )
            {
                // Insert the label.
                var label = new Label();
                label.Content = "C" + i + "-R" + j;
                label.Background = new SolidColorBrush(Colors.Azure);
                Grid.SetColumn(label, 2 * i);
                Grid.SetRow(label, 2 * j);
                dynamicGrid.Children.Add(label);

                // Insert the horizontal splitter.
                var horizontalGridSplitter = new GridSplitter();
                horizontalGridSplitter.Height = 1;
                horizontalGridSplitter.Background = new SolidColorBrush(Colors.DarkSlateBlue);
                horizontalGridSplitter.HorizontalAlignment = HorizontalAlignment.Stretch;
                horizontalGridSplitter.VerticalAlignment = VerticalAlignment.Center;
                Grid.SetColumn(horizontalGridSplitter, 2 * i );
                Grid.SetRow(horizontalGridSplitter, 2 * j + 1);
                Grid.SetRowSpan(horizontalGridSplitter, 1);
                Grid.SetColumnSpan(horizontalGridSplitter, 1);
                dynamicGrid.Children.Add(horizontalGridSplitter);

                // Insert the vertical splitter.
                var verticalGridSplitter = new GridSplitter();
                verticalGridSplitter.Width = 1;
                verticalGridSplitter.Background = new SolidColorBrush(Colors.DarkSlateBlue);
                verticalGridSplitter.HorizontalAlignment = HorizontalAlignment.Center;
                verticalGridSplitter.VerticalAlignment = VerticalAlignment.Stretch;
                Grid.SetColumn(verticalGridSplitter, 2 * i + 1);
                Grid.SetRow(verticalGridSplitter, 2 * j + 1);
                Grid.SetRowSpan(verticalGridSplitter, 1);
                Grid.SetColumnSpan(verticalGridSplitter, 1);
                dynamicGrid.Children.Add(verticalGridSplitter);
            }
        }

        // Display grid into a Window
        Content = dynamicGrid;
    }

La sortie que je reçois est la suivante:

sortie par défaut

Notez que je ne suis que capable de redimensionner les lignes (ne savez pas pourquoi les séparateurs verticaux ne s'affichent pas) et, pour une raison quelconque, lorsque je saisie un séparateur horizontal, il redimensionne la rangée entière et pas seulement la cellule individuelle. Des idées? Veuillez consulter la capture d'écran suivante pour voir le redimensionnement en action:

Entrez l'image Description ici

C'est ce que j'attendais si je redimensionniste la cellule (0,0) (l'image est éditée manuellement par moi):

Entrez la description de l'image ici

Merci d'avance!

Était-ce utile?

La solution

Si vous retirez la ligne Réglage de la ligne de votre verticalGridsPlitter et définissez-les sur des numros de couverture, vous verrez vos séparateurs verticaux.Mais finalement, je pense que vous essayez de faire quelque chose que la grille avec des séparateurs ne peut pas faire.Vous ne pouvez pas redimensionner la largeur et la hauteur des cellules individuelles, seules des lignes et des colonnes entières.

Après tout, si vous faites C0-R0 plus grand, que vous attendez-vous au reste de cette ligne à faire?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top