Добавление Сетки и Средств управления динамично в WPF

Шаблоны разработки не являются тривиально допускающими повторное использование решениями.

Шаблоны разработки являются допускающими повторное использование по определению. Они - шаблоны , Вы обнаруживаете в других хороших решениях.

шаблон А не является тривиально допускающим повторное использование. Можно реализовать Ваш вниз дизайн после шаблона как бы то ни было.

Реляционные скороговорки дизайна включают вещи как:

  1. Связи "один ко многим" (основная деталь, родительский ребенок) отношения с помощью внешнего ключа.

  2. отношения Many-Many с таблицей моста.

  3. Дополнительные непосредственные отношения, управляемые с ПУСТЫМИ УКАЗАТЕЛЯМИ в столбце FK.

  4. Схема "звезда": Размер и Факт, дизайн OLAP.

  5. Полностью нормализованный дизайн OLTP.

  6. Несколько индексируемых поисковых столбцов в размере.

  7. "Таблица поиска", которая содержит PK, описание и кодовое обозначение (обозначения), используемое одним или несколькими приложениями. Почему имеет код? Я не знаю, но когда они должны использоваться, это - способ управлять кодами.

  8. Uni-таблица. [Некоторый вызов это антишаблон; это - шаблон, иногда это плохо, иногда это хорошо.] Это - таблица с большим количеством материала, к которому предварительно присоединяются, который нарушает вторую и третью нормальную форму.

  9. таблица Array. Это - таблица, которая нарушает первую нормальную форму при наличии массива или последовательности значений в столбцах.

  10. база данных Смешанного использования. Это - база данных, нормализованная для обработки транзакций, но с большим количеством дополнительных индексов для создания отчетов и анализа. Это - антишаблон - не делают этого. Люди делают это так или иначе, таким образом, это - все еще шаблон.

Большинство людей, которые разрабатывают базы данных, может легко отбарабанить полдюжина, "Это - другой тех"; это шаблоны разработки, которые они используют регулярно.

И это не включает административные и операционные шаблоны использования и управления.

17
задан Sauron 8 September 2009 в 10:46
поделиться

1 ответ

Я использую следующий код для динамической генерации элементов управления в моем коде

Label[] drivesLabel;
Label[] percentageLabel;
ProgressBar[] drivesProgress;
int drivesCount = 0;

private void DrawControls()
{
    try
    {
        // Getting drive list.
        List<DriveInfo> driveList = GetHardDiskDrives();
        drivesCount = driveList.Count;

        // Initializing new Grid.
        Grid drivesGrid = new Grid();
        drivesGrid.Children.Clear();
        DrivesBorder.Child = drivesGrid;

        // Adding Rows and Colums to Grid.
        RowDefinition[] rows = new RowDefinition[2*drivesCount + 1];
        ColumnDefinition[] columns = new ColumnDefinition[6];

        // Draw Rows.
        for (int i = 0; i < 2*drivesCount + 1; i++)
        {
            rows[i] = new RowDefinition();
            drivesGrid.RowDefinitions.Add(rows[i]);

            // Setting Row height.
            rows[i].Height = (0 == i % 2) ? new GridLength( 5 ): new GridLength( 25 );
        }
        // Draw Columns.
        for (int i = 0; i < 6; i++)
        {
            columns[i] = new ColumnDefinition();
            drivesGrid.ColumnDefinitions.Add(columns[i]);
            if (i % 2 == 0)
            {
                // Setting column width.
                columns[i].Width = new GridLength(5);
            }
        }

        // Setting column width.
        columns[1].Width = new GridLength(60);
        columns[3].Width = new GridLength(180);
        columns[5].Width = new GridLength(60);

        // Draw Labels to show drive letters.
        drivesLabel = new Label[drivesCount];

        // Draw Progress bar to show drive usage.
        drivesProgress = new ProgressBar[drivesCount];

        // Draw Labels to show drive usage.
        percentageLabel = new Label[drivesCount];

        // Adding Labels and Progressbars to Grid.
        for (int i = 0, j = 1; i < drivesCount; i++, j++)
        {
            // Initialize Labels to show drives.
            drivesLabel[i] = new Label();
            drivesLabel[i].Content = driveList[i].Name;
            drivesLabel[i].Foreground = Brushes.Navy;
            Grid.SetRow(drivesLabel[i], i + j);
            Grid.SetColumn(drivesLabel[i], 1);
            drivesGrid.Children.Add(drivesLabel[i]);

            // Initialize ProgressBar to show usage.
            drivesProgress[i] = new ProgressBar();
            drivesProgress[i].FlowDirection = FlowDirection.LeftToRight;
            drivesProgress[i].HorizontalAlignment = HorizontalAlignment.Center;
            drivesProgress[i].VerticalAlignment = VerticalAlignment.Center;
            drivesProgress[i].Orientation= Orientation.Horizontal;
            drivesProgress[i].Value = 0;
            drivesProgress[i].Maximum = 100;
            drivesProgress[i].Width = 180;
            drivesProgress[i].Height = 18;
            Grid.SetRow(drivesProgress[i], i + j);
            Grid.SetColumn(drivesProgress[i], 3);
            drivesGrid.Children.Add(drivesProgress[i]);

            // Initialize Labels  to show usage in percentage.
            percentageLabel[i] = new Label();
            percentageLabel[i].Content = "0 %";
            Grid.SetRow(percentageLabel[i], i + j);
            Grid.SetColumn(percentageLabel[i], 5);
            drivesGrid.Children.Add(percentageLabel[i]);

            // Setting window height.
            SetWindowHeight(30);
        }
    }
    catch(Exception Ex) {}
}

Функции GetHardDiskDrives () и SetWindowHeight () являются функциями, определяемыми пользователем. Jpb предназначен для получения жестких дисков и установки высоты окна в соответствии с новыми добавленными элементами управления.

18
ответ дан 30 November 2019 в 13:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: