0

一部の製品をリストするデータに関して、XMLDataProvider 静的リソースがあります。マスター詳細シーンとして 2 つのコントロールがあります。1) すべての製品タイトルを一覧表示する ListBox と、2) 製品の詳細を表示する CONtentControl です。

現時点では問題なく動作していますが、ContentControl はハードコードされたテンプレートを使用しています。私が望むのは、異なるテンプレートを持つ製品を表示することであり、 ContentControl の ContentTemplate は、製品のフィールド (TemplateName) に基づいて動的に選択される必要があります。どうやってやるの?パラメーター (オブジェクト) から TemplateName プロパティにアクセスする方法がわからない SelectTemplate オーバーライド メソッドの作成に行き詰まっています。

コードは役に立ちますか?

4

1 に答える 1

2

名前が XmlNode の属性によって与えられる DataTemplate リソースを検索したいということですか? これを行うには、XmlElement にキャストitemして必要な値を見つけてから、TryFindResourceを呼び出してリソース ルックアップを実行します。

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
    var fe = container as FrameworkElement;
    var element = item as XmlElement;
    if (fe != null && element != null)
    {
        var templateName = element.GetAttribute("TemplateName");
        if (templateName != null)
        {
            return fe.TryFindResource(templateName) as DataTemplate;
        }
    }
    return null;
}

また、DataTriggers を使用して ContentTemplate を設定する ContentControl のスタイルを定義することにより、XAML でまったく同様のことを行うこともできます。

<Style x:Key="DynamicTemplateStyle" TargetType="ContentControl">
    <Style.Triggers>
        <DataTrigger Binding="{Binding XPath=@TemplateName}" Value="FirstTemplate">
            <Setter Property="ContentTemplate" Value="{StaticResource FirstTemplate}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding XPath=@TemplateName}" Value="SecondTemplate">
            <Setter Property="ContentTemplate" Value="{StaticResource SecondTemplate}"/>
        </DataTrigger>
        <!-- etc. -->
    </Style.Triggers>
</Style>
于 2010-06-23T03:20:54.760 に答える