【问题标题】:How to define a DataTemplate in code?如何在代码中定义 DataTemplate?
【发布时间】:2011-02-06 09:40:15
【问题描述】:

如何在代码中(使用 C#)创建 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。

【问题讨论】:

    标签: c# silverlight datagrid silverlight-3.0 datatemplate


    【解决方案1】:

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

    Scott Morrison: Defining Silverlight DataGrid Columns at Runtime

    注意DataGridTemplateColumn 的选项#2。

    【讨论】:

    • +1 这是正确的。我个人更喜欢使用 LinqToXml 对象来构建所需的 Xaml,但最终需要将结果字符串传递给 XamlReader 以编程方式创建 DataTemplate。
    【解决方案2】:

    您可以使用FrameworkElementFactory 添加像TextBlock 这样的控件。然后你可以将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;
    

    【讨论】:

    • OP 说他正在使用 Silverlight,据我所知不支持 FrameworkElementFactory。
    【解决方案3】:

    Microsoft 在 MSDN 上有一篇很好的文章:“Data Templating Overview”。我会从那里开始。

    更新:呃,从头开始。我阅读了您对“代码中”的要求。我将把链接留在这里,以供可能偶然发现这篇文章的人使用。

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多