【发布时间】:2012-08-15 13:14:59
【问题描述】:
我正在使用第 3 方控件(在本例中为 Telerik 的 RadChart 控件),它具有包含图表的多个元素的复杂内部 ControlTemplate。不幸的是,并非所有部分都明确地暴露给我的样式,我发现自己想通过 XAML 或通过代码在 ControlTemplate 内的特定子元素上设置属性。在与 XAML 斗争了一段时间后,我选择了以代码为中心的方法,但我仍然卡住了。
使用 Snoop,我可以看到最顶层的 ChartArea 控件(我可以访问)呈现了一个名为 PART_AxisX 的 AxisX2D 对象,该对象又具有一个包含 PART_AxisLabels 对象的模板,这是我需要设置样式的对象。 (顺便说一句,我要设置的属性是 AlternationCount,但我找不到更简单的方法来获取它。
我尝试使用ControlTemplate.FindName 方法(如图here)获取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)有没有更好的方法来解决这个问题,而不是像这样迂回?
【问题讨论】:
-
您是否在等到加载图表区域?...模板可能尚未应用。应该在 OnAppyTemplate 之后完成。
-
是的,这确实是问题所在。我访问它有点太早了,但我认为到那时一切都会加载。谢谢。当然,Telerik 过于复杂的可视化树确保这并没有帮助我。 :)
-
你想让我把它变成一个答案,以便它可以打勾?...或将评论转换为答案?...我不知道礼仪。
-
把它变成一个答案,我很乐意接受它。
标签: wpf