質問

コードで 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>"
   );
}

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

役に立ちましたか?

解決

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

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

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

他のヒント

このコードにはいくつかの問題があり、要素が見つかりませんという例外が発生しました。参考までに、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);
        }

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

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

わかりました!次のようにコーディングすると、テンプレートにアクセスできます。 Application.Current.resources["TextBoxEditTemplate"]一方、このテンプレートのメンバーを検索する一部のメソッドは機能しません。この DataTemplate は IDictionary を実装していないため、この dataTemplate の項目に x:Key 属性を割り当てることはできません。例では myOwnControl として使用します。

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

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

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

FindName は WPF でのみ機能します

MSDNからの引用:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top