我有一个XamDataGrid
(版本13.2),我订阅了LabelPresenters的SizeChanged
事件。首次加载网格时,会为第一个SizeChanged
Field
投掷两个LabelPresenter
个事件。在做了一些挖掘后,我发现这两个事件是针对LabelPresenters
的两个不同实例。
我正在尝试访问ActualWidth
的{{1}},但是对于其中一个事件,此属性的值不是我所期望的。例如,一个LabelPresenter
的值为40.0(与屏幕上显示的值匹配),而另一个将显示为166.0。
当我使用Snoop查看可视化树时,它只显示显示的字段LabelPresenter
,这正是我所期望的。
示例XAML:
LabelPresenters
示例C#:
<igDP:XamDataGrid BindToSampleData="True" Name="xamDataGrid1" VerticalAlignment="Top" >
<igDP:XamDataGrid.Resources>
<Style TargetType="{x:Type igDP:LabelPresenter}">
<EventSetter Event="SizeChanged" Handler="OnLabelPresenterSizeChanged"/>
</Style>
</igDP:XamDataGrid.Resources>
</igDP:XamDataGrid>
即使网格中存在四个字段,您也可以在字典中看到5 public partial class MainWindow : Window
{
Dictionary<LabelPresenter, Field> labelPresenters = new Dictionary<LabelPresenter, Field>();
public MainWindow()
{
InitializeComponent();
}
private void OnLabelPresenterSizeChanged(object sender, SizeChangedEventArgs e)
{
LabelPresenter lp = sender as LabelPresenter;
labelPresenters.Add(lp, lp.Field);
Debug.WriteLine("Field count: {0} LabelPresenter Count: {1}", xamDataGrid1.FieldLayouts[0].Fields.Count, labelPresenters.Count);
}
。
Snoop展示了什么
如何在LabelPresenters
个活动期间过滤掉或忽略这个额外的LabelPresenter
?
答案 0 :(得分:2)
通过在运行时挖掘可视化树,我能够发现额外的LabelPresenter
是CellPlaceholder
对象的子节点。它的documentation仅表示它仅供内部使用,因此我真的不知道它的用途。
通过忽略此LabelPresenter
(并且只检查ActualPosition.Column
属性值为0的字段的可视树),我可以过滤掉逻辑中错误的ActualWidth
值。