28

コードで Silverlight データ テンプレートを作成するにはどうすればよいですか? WPF の例はたくさん見てきましたが、Silverlight の例はありません。

編集:以下のサンティアゴからの回答に基づいて、これを使用しているコードを次に示します。

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

これは非常にうまく機能し、その場でバインディングを変更できます。

4

4 に答える 4

39

プログラムで作成することはできませんが、次のようなコードで XAML 文字列から読み込むことができます。

    public static DataTemplate Create(Type type)
    {
        return (DataTemplate) XamlReader.Load(
            @"<DataTemplate
                xmlns=""http://schemas.microsoft.com/client/2007"">
                <" + type.Name + @"/>
              </DataTemplate>"
          );
    }

上記のスニペットは、単一のコントロールを含むデータ テンプレートを作成します。これは、必要なコンテンツを含むユーザー コントロールである場合があります。

于 2008-09-16T13:28:40.483 に答える
11

私はこのコードでいくつかの問題を抱えていました。例外が発生しない要素を取得しました。参考までに、DataTemplateに名前空間を含める必要がありました...

private DataTemplate Create(Type type)
        {
            string xaml = @"<DataTemplate 
                xmlns=""http://schemas.microsoft.com/client/2007""
                xmlns:controls=""clr-namespace:" + type.Namespace + @";assembly=" + type.Namespace + @""">
                <controls:" + type.Name + @"/></DataTemplate>";
            return (DataTemplate)XamlReader.Load(xaml);
        }
于 2008-12-10T13:38:31.160 に答える
4

はい、WPF の現在のバージョンより古い Silverligt 4 です。テンプレートをリソースとして追加する場合、つまり私が行ったように、ResourceDictionary の間の Application.xaml MergedResources に userControl テンプレートを追加しました。XAML では、タグが IDictionary を実装している場合、x:Key 属性を使用できます。そのように

   <ResourceDictionary>
    <DataTemplate x:Key="TextBoxEditTemplate">
    <Some user control x:Name="myOwnControl" />
    </DataTemplate>
   </ResourceDictionary>

Ok!Application.Current.resources["TextBoxEditTemplate"]をコーディングすることでテンプレートにアクセスできますが 、このテンプレートのメンバーを見つけるためのいくつかの方法は機能しません。この DataTemplate は IDictionary を実装していないため、この dataTemplate のアイテムに x:Key 属性を割り当てることはできません。例では myOwnControl として。

xaml を使用しない場合、現在の Silverlight には、完全に動的なコード ビハインド DataTemplates の作成に関していくつかの制限があります。WPF でも動作します。

とにかく、この時点での最善の解決策は、datatemplate 用の XAML スクリプトを作成することです。DataTemplate スクリプトでいくつかの値要素を割り当てることができます。DependencyObjectProperty を持ついくつかのプロパティを持つ独自のユーザー コントロールを作成しました...

最後に、オブジェクトに継承がない場合、つまり MyControl:UserControl ではない場合、この方法でMyObject:DependencyObjectを継承できます。この方法で Application.Current.Resources.FirstChilderen... のように呼び出してオブジェクトに到達できます。

FindName は WPF でのみ機能します

于 2011-08-18T01:58:16.423 に答える
2

MSDN からの引用:

データ テンプレートを作成するためのコンテンツを定義する XAML の使用法は、設定可能なプロパティとして公開されません。これは、DataTemplate オブジェクト要素の XAML 処理に組み込まれた特別な動作です。

于 2008-09-15T13:28:04.330 に答える