Как сделать текст TextBox редактируемым после динамического создания элемента управления TextBox? - PullRequest
1 голос
/ 03 марта 2012

Я создал контрольный массив текстовых полей, и они находятся в сетке, но я не могу получить доступ к окну, чтобы изменить текст. До сих пор я пытался решить это с помощью:

                fields[row, col].IsEnabled = true;
                fields[row, col].IsReadOnly = false;

но это не сработало.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    int wdth = 40;
    int hght = 32;
    for (int row = 0; row <= 8; row++)
    {
        ColumnDefinition colDef = new ColumnDefinition();
        RowDefinition rowDef = new RowDefinition();
        colDef.MinWidth = wdth;
        colDef.MaxWidth = wdth;
        rowDef.MinHeight = hght;
        rowDef.MaxHeight = hght;
        grdAdtn.ColumnDefinitions.Add(colDef);
        grdAdtn.RowDefinitions.Add(rowDef); 
    };
    TextBox[,] fields = new TextBox[9, 9];
    FontFamily font = new FontFamily("Courier New");
    for(int row=0; row <= 8; row++){
        for(int col = 0; col <= 8; col++){
            fields[row,col]=new TextBox();
            fields[row, col].Name = "txt" + row.ToString() + "i"+col.ToString();
            if ((row==0)&&(col==0))
            {
                fields[row, col].Text = "+";
            }
            else if (row == 0)
            {
                fields[row, col].Text = (col+1).ToString();
            }
            else if (col == 0)
           {
               fields[row, col].Text = (row+1).ToString();
           }
           else
           {
               fields[row, col].Text = "??";
           }
            fields[row, col].FontSize = 22;
            fields[row, col].FontFamily = font;
            fields[row, col].MaxLength = 2;
            grdAdtn.Children.Add((fields[row, col]));
            Grid.SetColumn(fields[row,col], col);
            Grid.SetRow(fields[row,col], row);
            fields[row, col].Width = wdth-2;
            fields[row, col].Height = hght-2;
            fields[row, col].VerticalAlignment = VerticalAlignment.Center;
            fields[row, col].HorizontalAlignment = HorizontalAlignment.Center;
            fields[row, col].HorizontalContentAlignment = HorizontalAlignment.Center;
            fields[row, col].VerticalContentAlignment = VerticalAlignment.Center;
            fields[row, col].IsEnabled = true;
            fields[row, col].IsReadOnly = false;
           }
    }
}

Есть какие-нибудь подсказки?

Также я могу сфокусировать их с помощью fields[row,col].Focus(), чтобы они, очевидно, были включены, но я не могу писать текст, и когда я щелкаю мышью по некоторым текстовым полям, он не переносит фокус на этот текстовый ящик (нажатие вкладки работает, но нужно больше функциональности). Это ничего не делает, насколько я могу видеть. Нужно ли вручную добавлять обработчики событий для MouseDown / MouseUp после динамического создания TextBox?

1 Ответ

0 голосов
/ 18 марта 2012

Я вставил ваш Window_Loaded в решение, встроил, и он прекрасно работает - я могу просто отлично изменить текст в сгенерированных текстовых полях ... что еще у вас есть в вашем XAML помимо

<Grid x:Name="grdAdtn"/>
...