Как определить DataTemplate в коде?

Как создать код DataTemplate в коде (используя С#), а затем добавить элемент управления к этому 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>

Я использую Sivlerlight.

Ответ 1

Насколько я знаю, единственный способ создать DataTemplate в Silverlight - использовать XamlReader. В принципе, вы просто передадите XAML как строку, и он вернет вам DataTemplate. Решение Byron применимо к WPF, но Silverlight (насколько мне известно) не поддерживает FrameworkElementFactory.

Скотт Моррисон: определение столбцов DataGrid Silverlight во время выполнения

Обратите внимание на вариант № 2 для DataGridTemplateColumn.

Ответ 2

Вы можете добавить элемент управления как TextBlock с помощью FrameworkElementFactory. Затем вы можете добавить TextBlock в VisualTree DataTemplate. Например:

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

Ответ 3

У Microsoft есть хорошая статья в MSDN: " Обзор шаблонов данных." Я бы начал там.

Обновить: Eh, поцарапайте это. Я прочитал ваше требование "в коде". Я просто оставлю ссылку здесь для тех, кто может наткнуться на этот пост.