我正在使用第 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)有没有更好的方法来解决这个问题,而不是像这样迂回?