Создать из столбца xaml DataGridTemplateColumn в c# - PullRequest
1 голос
/ 31 марта 2020

У меня короткий код xaml:

<DataGridTemplateColumn>
     <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
               <TextBlock Text="{Binding Category}"></TextBlock>
           </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
      <DataGridTemplateColumn.CellEditingTemplate>
          <DataTemplate>
                <TextBox Text="{Binding Category}" KeyUp="TextBox_KeyUp"></TextBox>
          </DataTemplate>
      </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

Но я не знаю, как преобразовать его в c#. Я сделал это: но это не работает, и не знаю, как добавить Event в TextBox:

Редактировать: не выбрасывать исключение, но все еще не работает. Без события.

var a = new DataGridTemplateColumn() { Header = "Kategoria", Width = new DataGridLength(1, DataGridLengthUnitType.Star) };
var aa = new DataTemplate();
aa.Resources.Add(1, new TextBlock() { Text = new Binding("Category").ToString() });
a.CellTemplate = aa;
var aaa = new DataTemplate();
aaa.Resources.Add(2, new System.Windows.Controls.TextBox() { Text = new Binding("Category").ToString() });
a.CellEditingTemplate = aaa;
ProjectDataGrid.Columns.Add(a);
ProjectDataGrid.Columns.Add(new DataGridTextColumn() { Header = "Mnemonik", Binding = new Binding("Mnemoniese"), Width = new DataGridLength(1, DataGridLengthUnitType.Star) });

1 Ответ

2 голосов
/ 31 марта 2020

Я думаю, что это может быть полезно. Я просто конвертирую вашу разметку XAML в C# код, шаг за шагом.

DataGridTemplateColumn templateColumn = new DataGridTemplateColumn
{
    CellTemplate = new DataTemplate
    {
        DataType = typeof(TextBlock)
    },
    CellEditingTemplate = new DataTemplate
    {
        DataType = typeof(TextBox)
    }
};

FrameworkElementFactory CategoryBlock = new FrameworkElementFactory(typeof(TextBlock));
CategoryBlock.SetBinding(TextBlock.TextProperty, new Binding("Category"));
templateColumn.CellTemplate.VisualTree = CategoryBlock;

FrameworkElementFactory CategoryTextBox = new FrameworkElementFactory(typeof(TextBox));
CategoryTextBox.SetBinding(TextBox.TextProperty, new Binding("Category"));

CategoryTextBox.AddHandler(KeyUpEvent, new KeyEventHandler(TextBox_KeyUp));
templateColumn.CellEditingTemplate.VisualTree = CategoryTextBox;

ProjectDataGrid.Columns.Add(templateColumn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...