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);
}