如何在代码中定义DataTemplate?

时间:2010-04-10 01:52:49

标签: c# silverlight datagrid silverlight-3.0 datatemplate

如何在代码中创建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 个答案:

答案 0 :(得分:9)

据我所知,在Silverlight中创建DataTemplate的唯一方法是使用XamlReader。基本上你只需将XAML作为字符串传递给它,它会给你一个DataTemplate。 Byron的解决方案适用于WPF,但Silverlight(据我所知)不支持FrameworkElementFactory

Scott Morrison: Defining Silverlight DataGrid Columns at Runtime

注意DataGridTemplateColumn的选项#2。

答案 1 :(得分:4)

您可以使用TextBlock添加FrameworkElementFactory之类的控件。然后,您可以将TextBlock添加到DataTemplate的VisualTree中。像这样:

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

答案 2 :(得分:1)

微软在MSDN上发表了一篇很好的文章:“Data Templating Overview。”我会从那里开始。

更新:呃,抓一点。我读过你对“代码中”的要求。我会把链接留在这里,以免谁有人偶然发现这篇文章。