5

C# kodu ile kendi DataTemplate'i oluşturmak için bir snippet yazdım. Ve bunu datagrid sütununun düzenleme şablonuna ekliyorum. object templateContent = tc.CellTemplate.LoadContent (); çağrıldığında, uygulama çöktü ve bana "FrameworkElementFactory bu işlem için kapalı bir şablonda olması gerekir" bir istisna atar. Veri sayfamı oluşturduğum kod budur.FrameworkElementFactory bu işlem için mühürlü bir şablonda olmalıdır

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

cevap

13

Çerçeve şablon kodunu yansıtıcıya yansıtıyorum. Ve ben tc.CellTemplate.LoadContent() FrameworkTemplate sınıfında "_sealed" adlı özel bir alan ile ilgili buldum.

Daha sonra ayarlanan alanın nerede bulunduğunu buldum ve bu yöntemi arıyorum, sorun çözüldü. Harikasınız

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

: Burada

çözümdür! Teşekkürler! – Marc

+2

Dinamik olarak bir Telerik GridView kullanarak DataTemplates yaratıyorum ve işe almak için Seal() çağırmak zorunda kaldı. Neden biliyor musun? Bunun neden kullanılması gerektiğine dair bir örnek bulamadım mı? –