Как определить DataTemplate в коде? - PullRequest
14 голосов
/ 10 апреля 2010

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

Ответы [ 3 ]

9 голосов
/ 10 апреля 2010

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

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

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

4 голосов
/ 10 апреля 2010

Вы можете добавить элемент управления как 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;
1 голос
/ 10 апреля 2010

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

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

...