继续追踪这个方法的引用,我们会发现:ItemContainerGenerator类的PrepareItemContainer()调用了这个方法: 复制代码 //ItemContainerGenerator 这个属性是附加属性,ItemContainerGenerator有一个静态方法LinkContainerToItem(),是专门用来为每个container设定(连接)这个属性的: 复制代码 //ItemContainerGenerator 但是,这里的问题是,Panel类的这个神秘的_itemContainerGenerator字段是从哪里来的?一个Panel怎么会和ItemContainerGenerator扯上关系? (this); if (_itemContainerGenerator ! ()方法来获得一个正确的ItemContainerGenerator给其_itemContainerGenerator字段(Panel的Generator属性)赋值。
我先在TreeListView的OnExpanded事件处理程序中尝试编写代码获取每一个TreeListView,但是发现这个事件在发生时,所有的子节点并没有生成,所以不能通过ItemContainerGenerator.GetContainerForItem 接着,我查看了ItemsControl的接口声明,发现ItemContainerGenerator属性有事件StatusChanged。 代码如下: this.ItemContainerGenerator.StatusChanged += (o, e) => { if (this.ItemContainerGenerator.Status this.PrepareToAdjustFirstColumnWidth(); } private void PrepareToAdjustFirstColumnWidth() { this.ItemContainerGenerator.StatusChanged += (o, e) => { if (this.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated
知识,通过重写GetContainerForItemOverride和IsItemItsOwnContainerOverride、PrepareContainerForItemOverride函数并使用ItemContainerGenerator LabelMemberPath; int count = Items.Count; for (int i = 0; i < count; i++) { if (ItemContainerGenerator.ContainerFromIndex ItemContainerGenerator.ContainerFromIndex ItemContainerGenerator.ContainerFromIndex(Int32)返回ItemsControl 中指定索引处的Item,当Repeater的LabelMemberPath改变时,Repeater首先强制更新了LabelMemberTemplate,然后用ItemContainerGenerator.ContainerFromIndex
= null) { ListBoxItem _selectedItem = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem TextBlock值为:" + myTxt.Text)); } ListBoxItem _firstItem = (ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem
在与 ScrollViewer 交互完成的同时,UIVPanel 还应该根据提供的视窗大小,调用基类 VirtualizingPanel 中 ItemContainerGenerator 属性的一套元素生成方法 在使用 ItemContainerGenerator 来生成元素时,需要理解 GeneratorPosition 的含义。 这跟 VirtualizingPanel.ItemContainerGenerator 中虚拟化的内部实现的数据结构是有关系的。 所有的块在 ItemContainerGenerator 中由一个双向链表存储在字段 _itemMap 中。_itemMap.Next 就是第一个块,也可以理解为起点或者终点。 而操作 ItemContainerGenerator 都使用 GeneratorPosition,可以方便地和内部的数据结构交互。(这样设计的原因可能是出于性能的考虑?)
rowindex = i; } } DataGridRow row = (DataGridRow)dgSourceData.ItemContainerGenerator.ContainerFromIndex DataGridCellsPresenter>(row);//函数调用,获取行中所有单元格的集合 DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex dgSourceData.ScrollIntoView(row, dgSourceData.Columns[colindex]); //cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex
DataGridCellsPresenter中的实例, 大家可以通过以下的代码遍历VisualTree DataGridRow rowContainer = (DataGridRow)dataGrid1.ItemContainerGenerator.ContainerFromIndex = GetVisualChild<DataGridCellsPresenter>(rowContainer); DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex
Random r = new Random(); var item = this.list.Items[r.Next(0, 50)]; ListBoxItem listBoxItem = list.ItemContainerGenerator.ContainerFromItem Random r = new Random(); var item = this.list.Items[r.Next(0, 50)]; ListBoxItem listBoxItem = list.ItemContainerGenerator.ContainerFromItem
以下的一个或多个源可能已引发错误事件: System.Windows.Controls.ItemContainerGenerator System.Windows.Controls.ItemCollection 在“即时”窗口中运行与下面的命令类似的命令:\n System.Diagnostics.PresentationTraceSources.SetTraceLevel(myItemsControl.ItemContainerGenerator
dataobj.Index2)) { TreeViewItem treeItem = control.ItemContainerGenerator.ContainerFromItem treeItem.IsExpanded = true; } if (treeItem.ItemContainerGenerator.Status item in control.Items) { TreeViewItem treeItem = control.ItemContainerGenerator.ContainerFromItem treeItem.IsExpanded = expandNode; //展开或缩放 if (treeItem.ItemContainerGenerator.Status
{ // 要显示后,才能取到数据 DataGridRow rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex dataGrid.ScrollIntoView(dataGrid.Items[rowIndex]); rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex ) { DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move; 运行代码时编译器会发出很多关于ItemContainerGenerator
} else { var container = ContextMenu.ItemContainerGenerator.ContainerFromItem
ItemContainerGenerator.ContainerFromItem(stu) as ListViewItem; CheckBox chb = this.FindVisualChild ~~~~ 运行程序,并单击某个显示姓名的TextBox,效果如下: ~~~~ 由本例可以看出,无论是从事件源头“自上而下”地找,还是使用ItemContainerGenerator.ContainerFromItem