FrameworkElementFactory должен быть в запечатанном шаблоне для этой операции

Я написал фрагмент для создания собственного DataTemplate с помощью кода C#. И я добавляю его в шаблон редактирования столбца таблицы данных. Когда я позвонил object templateContent = tc.CellTemplate.LoadContent ( );, приложение завершилось сбоем и выдает мне исключение: "FrameworkElementFactory должен быть в запечатанном шаблоне для этой операции". Это код, который я создаю для моей таблицы данных.

public override DataTemplate GenerateCellTemplate ( string propertyName )
    {
        DataTemplate template = new DataTemplate ( );
        var textBlockName = string.Format ( "{0}_TextBlock", propertyName );
        FrameworkElementFactory textBoxElement = new FrameworkElementFactory ( typeof ( TextBlock ), textBlockName );
        textBoxElement.SetBinding ( TextBlock.TextProperty, new Binding ( propertyName ) );
        template.VisualTree = textBoxElement;
        Trigger trigger = new Trigger ( );
        return template;
    }

1 ответ

Решение

Я отражаю код шаблона рамки в отражателе. И я обнаружил, что tc.CellTemplate.LoadContent () касается частного поля с именем "_sealed" в классе FrameworkTemplate.

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

Вот решение:

public override DataTemplate GenerateCellTemplate ( string propertyName )
{
    DataTemplate template = new DataTemplate ( );
    var textBlockName = string.Format ( "{0}_TextBlock", propertyName );
    FrameworkElementFactory textBoxElement = new FrameworkElementFactory ( typeof ( TextBlock ), textBlockName );
    textBoxElement.SetBinding ( TextBlock.TextProperty, new Binding ( propertyName ) );
    template.VisualTree = textBoxElement;
    Trigger trigger = new Trigger ( );

    // This solves it!
    template.Seal();

    return template;
}
Другие вопросы по тегам