0

主題は、DataContext にバインドされたカスタマイズされたコントロールを定義したことです。そして、DataContext の特定のプロパティ値に従って、コントロール テンプレートを動的に変更したいと考えました。

考えた方法は2つあるのですが、どちらがいいのかわかりません。

1.ResourceDictionary でコントロール テンプレートを使用しないでください。コントロールのすべての詳細は C# コードで定義されます。DataContext のプロパティ値が変更されたときに、DependencyProperty CallBack メソッドを使用してコントロールをレンダリングします。

2.ResourceDictionary でコントロール テンプレートを定義し、DataTrigger を使用して「Control.Template」プロパティを変更します。

私のアプリケーションでは、このタイプのインスタンスが何千も作成されるため、ControlTemplate の変更が効果的でない場合は受け入れられません。

アドバイスやより良い解決策を教えてください。

4

3 に答える 3

1

何千もの複雑なコントロールのインスタンスが含まれる場合、標準の WPF 手法を使用しても効果がない可能性があります。http://msdn.microsoft.com/en-us/magazine/dd483292.aspxを参照してください。

Template は複数の DataContext プロパティに依存し、おそらく複雑なロジックを伴うため、MultiBinding + IMultiValueConverter を Control.Template 依存プロパティに使用します。

于 2012-05-10T09:47:09.223 に答える
0

おそらく、コントロールの一部をカスタマイズContentPresenterするためにを使用できます。自動的に適用されるカスタマイズ可能なパーツに をControlTemplate提供できます。DataTemplate

于 2012-05-10T09:24:39.937 に答える
0

どのテンプレートを表示するかを制御するには、データ トリガーを含むスタイルを使用します。この例のように:

<Style x:Key="Die1Face" TargetType="{x:Type Button}">
        <Setter Property="Template" Value="{StaticResource dieNone}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=ThrowDie1[0]}" Value="1" >
                <Setter Property="Template" Value="{StaticResource dieOneA}" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=ThrowDie1[0]}" Value="2" >
                <Setter Property="Template" Value="{StaticResource dieTwoA}" />
            </DataTrigger>
    </Style.Triggers>
    </Style>

これにより、必要な柔軟性が得られます。

于 2012-05-10T09:33:04.317 に答える