为什么XamDataGrid的第一列有两个LabelPresenters?

时间:2015-03-18 15:14:14

标签: wpf infragistics xamdatagrid

我有一个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展示了什么 What Snoop shows enter image description here

如何在LabelPresenters个活动期间过滤掉或忽略这个额外的LabelPresenter

1 个答案:

答案 0 :(得分:2)

通过在运行时挖掘可视化树,我能够发现额外的LabelPresenterCellPlaceholder对象的子节点。它的documentation仅表示它仅供内部使用,因此我真的不知道它的用途。

通过忽略此LabelPresenter(并且只检查ActualPosition.Column属性值为0的字段的可视树),我可以过滤掉逻辑中错误的ActualWidth值。