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;
}