How to define a DataTemplate in code?
Asked Answered
R

3

14

How can I create a DataTemplate in code (using C#) and then add a control to that DataTemplate?

<data:DataGrid.RowDetailsTemplate>
    <DataTemplate>
        <Border>
            <Border Margin="10" Padding="10" BorderBrush="SteelBlue" 
                 BorderThickness="3" CornerRadius="5">
                <TextBlock Text="{Binding Description}" TextWrapping="Wrap" 
                     FontSize="10">
                </TextBlock>
            </Border>
        </Border>
    </DataTemplate>
</data:DataGrid.RowDetailsTemplate>

I am using Sivlerlight.

Rinderpest answered 10/4, 2010 at 1:52 Comment(0)
H
9

As far as I know, the only way to create a DataTemplate in Silverlight is to use XamlReader. Basically you would just pass it the XAML as a string and it will give you back a DataTemplate. Byron's solution would apply to WPF but Silverlight (to the best of my knowledge) does not support FrameworkElementFactory.

Scott Morrison: Defining Silverlight DataGrid Columns at Runtime

Take note of option #2 for DataGridTemplateColumn.

Hindsight answered 10/4, 2010 at 2:51 Comment(1)
+1 This is correct. Personally I prefer to use LinqToXml objects to build the Xaml needed but ultimately a result string needs to be passed to XamlReader to create a DataTemplate programmatically.Samphire
W
4

You can add a control like a TextBlock using a FrameworkElementFactory. Then you can add the TextBlockto the VisualTree of the DataTemplate. Like so:

//Create binding object and set as mode=oneway
Binding binding = new Binding();
binding.Path = new PropertyPath("SomePropertyPathName");
binding.Mode = BindingMode.OneWay;

//get textblock object from factory and set binding
FrameworkElementFactory textElement = new FrameworkElementFactory(typeof(TextBlock));
textElement.SetBinding(TextBlock.TextProperty, binding);

//apply textblock to datatemplate
dataTemplate.VisualTree = textElement;
Walczak answered 10/4, 2010 at 1:58 Comment(1)
The OP says he's using Silverlight which as far as I know does not support FrameworkElementFactory.Hindsight
H
1

Microsoft has a good article over at MSDN: "Data Templating Overview." I would start there.

Update: Eh, scratch that. I read over your requirement for "in code." I'll just leave the link here for whoever might stumble upon this post.

Hienhieracosphinx answered 10/4, 2010 at 1:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.