FrameworkElementFactory 必须位于密封模板中才能执行此操作
我编写了一个片段来通过 C# 代码创建自己的 DataTemplate。我将其添加到数据网格列的编辑模板中。 当我调用 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;
}
I wrote a snippet to create a own DataTemplate by c# code. And i add it to datagrid column's editing template.
When i called object templateContent = tc.CellTemplate.LoadContent ( );
, the application crashed, and throw me a exception which is "FrameworkElementFactory must be in a sealed template for this operation.".
This is the code i create my datatemplate.
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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我在reflector中反映了框架模板代码。我发现 tc.CellTemplate.LoadContent () 与类 FrameworkTemplate 中名为“_sealed”的私有字段有关。
然后我找到了要设置值的字段,调用这个方法,问题就解决了。
这是解决方案:
I reflect the framework template code in reflector. And i found tc.CellTemplate.LoadContent ( ) is concerned with a private field named "_sealed" in the class FrameworkTemplate.
Then i found the field where be set value, and i call this method, the problem is solved.
Here is the solution: