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

Wpf 为什么XamDataGrid的第一列有两个LabelPresenter?,wpf,infragistics,xamdatagrid,Wpf,Infragistics,Xamdatagrid,我有一个XamDataGrid(13.2版),在那里我订阅了LabelPresenters的SizeChanged事件。首次加载网格时,将为第一个字段的LabelPresenter引发两个SizeChanged事件。在做了一些挖掘之后,我发现这两个事件是针对LabelPresenters的两个不同实例的 我正在尝试访问LabelPresenter的实际宽度,但对于其中一个事件,此属性的值不是我期望的值。例如,一个LabelPresenter的值为40.0(与屏幕上显示的内容相匹配),而另一个则显

我有一个
XamDataGrid
(13.2版),在那里我订阅了LabelPresenters的
SizeChanged
事件。首次加载网格时,将为第一个
字段
LabelPresenter
引发两个
SizeChanged
事件。在做了一些挖掘之后,我发现这两个事件是针对
LabelPresenters
的两个不同实例的

我正在尝试访问
LabelPresenter
实际宽度
,但对于其中一个事件,此属性的值不是我期望的值。例如,一个
LabelPresenter
的值为40.0(与屏幕上显示的内容相匹配),而另一个则显示为166.0

当我使用Snoop查看可视化树时,它只显示所显示字段的
LabelPresenters
,这是我所期望的

样本XAML:

<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>

样本C#:

公共部分类主窗口:窗口
{
字典标签Presenters=新字典();
公共主窗口()
{
初始化组件();
}
私有void OnLabelPresenterSizeChanged(对象发送方,SizeChangedEventArgs e)
{
LabelPresenter lp=发送方作为LabelPresenter;
labelPresenters.Add(lp,lp.Field);
Debug.WriteLine(“字段计数:{0}LabelPresenter计数:{1}”,xamDataGrid1.FieldLayouts[0].Fields.count,LabelPresenter.count);
}
您可以在字典中看到5个
LabelPresenters
,即使网格中存在四个字段

史努比的表演


SizeChanged
事件期间,我如何过滤或忽略这个额外的
LabelPresenter

通过在运行时挖掘可视化树,我能够发现额外的
LabelPresenter
CellPlaceholder
对象的子对象。for它只声明它仅供内部使用,所以我真的很高兴我不知道这是干什么用的


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

你在infragistics论坛上发布了吗?infragistics不再允许你在没有当前订阅的情况下在他们的论坛上发布,因此我在尝试发布新订阅之前在这里进行了尝试。首先可能是RowHeader的列标题。
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);
    }