0

我正在使用第 3 方控件(在本例中为 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 回答