0

私たちのアプリでは、サードパーティのライブラリ コンポーネントを使用しています。テンプレート全体で 1 つの値のみを変更する必要があります。テンプレートを再定義せずにこれをアーカイブするにはどうすればよいですか?

たとえば、controlTemplate:

<ControlTemplate TargetType="{x:Type Label}">
        <Border x:Name="PART_MainBorder"
                BorderBrush="Black" 
                BorderThickness="{TemplateBinding BorderThickness}">
            <ContentPresenter/>
        </Border>            
</ControlTemplate>

変更する必要がありますPART_MainBorder.BorderBrush。これどうやってするの?

このリンクを見つけましたが、他に方法がないなんて信じられません..

ありがとう。

4

1 に答える 1

3

XAML でそれを行うためのよりエレガントな方法があると確信していますが、質問のテンプレートに答えるのはクッキーよりもかわいいので、コード ビハインドでテンプレート オブジェクトのプロパティの変更を開始することはできません。テンプレートが適用されたコントロールを介して、テンプレート コントロールのプロパティを変更できます。ControlTemlateテンプレート化されたコントロールの場合は、コンテンツの生成DataTemplateに使用されます。上記のテンプレートを適用したものContentPresenterが 2 つあるとします。Labels

<Label Content="A" x:Name="Label1"/>
<Label Content="B" x:Name="Label2"/>

Border.BorderBrush次に、コード内で次のように変更できます。

(Label1.Template.FindName("PART_MainBorder", Label1) as Border).BorderBrush = new SolidColorBrush(Colors.Red);
(Label2.Template.FindName("PART_MainBorder", Label2) as Border).BorderBrush = new SolidColorBrush(Colors.Orange);

2つの色Labels異なる ことに注意してくださいBorderBrush

于 2013-06-17T13:33:33.753 に答える