0

サードパーティのコントロール(この場合はTelerikのRadChartコントロール)を使用しています。これには、グラフのいくつかの要素を含む複雑な内部ControlTemplateがあります。残念ながら、すべての部分が明示的にスタイル設定に公開されているわけではなく、XAMLまたはコードを介してControlTemplate内の特定のサブ要素にプロパティを設定したいと思っています。しばらくXAMLに苦労した後、私はコード中心のアプローチに落ち着きましたが、それでも立ち往生しています。

Snoopを使用すると、最上位のChartAreaコントロール(アクセス可能)がPART_AxisXという名前のAxisX2Dオブジェクトをレンダリングし、そのオブジェクトにPART_AxisLabelsオブジェクトを含むテンプレートが含まれていることがわかります。これはスタイルを設定する必要があります。(ちなみに、私が設定したいプロパティはAlternationCountですが、それに到達するためのよりハッキーな方法を見つけることができませんでした)。

ビジュアルツリー

ControlTemplate.FindNameメソッド(ここに示す)を使用してAxisX2Dオブジェクトを取得し、次にそのオブジェクトでAxisLabelsオブジェクトを取得しようとしましたが、FindNameは常にnullを返します。

 var chartArea = myChart.DefaultView.ChartArea;
 var visualAxisX = chartArea.Template.FindName("PART_AxisX", chartArea) as AxisX2D;

SnoopはそれchartAreaが実際には、AxisX2Dのものであることを確認していますがTemplatedParent。デバッガーをチェックインすると、chartAreaの内部TemplateプロパティにPART_AxisXが見つかりました。

だから私の質問は次のとおりです:1)私はここで何が間違っているのですか?2)これほど回り道ではない、これにアプローチするためのより良い方法はありますか?

4

1 に答える 1

1

Loaded解決策は、コントロールでイベントが発生するまで待つことです。

このイベントが発生すると、テンプレートが適用され、コントロールのビジュアルツリーが構築されたことがわかります。そのため、FindNameを使用して要素にアクセスできます。

ContentControlでコンテンツテンプレートを使用する場合のために、ここに示されているわずかに関連するリンク。

于 2012-08-15T13:55:51.973 に答える