gpt4 book ai didi

wpf - ItemsControl 在 MainWindow 的构造函数期间没有子项

转载 作者:行者123 更新时间:2023-12-04 06:03:03 26 4
gpt4 key购买 nike

基于对SO问题“WPF: arranging collection items in a grid”的回答,我有以下几点:

    <ItemsControl Name="itemsControl1" ItemsSource="{Binding MyItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Name="theGrid" ShowGridLines="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="{x:Type FrameworkElement}">
<Setter Property="Grid.Row" Value="{Binding RowIndex}" />
<Setter Property="Grid.Column" Value="{Binding ColumnIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>


现在,我想在后面的代码中设置 theGrid 的行数和列数:
            theGrid.RowDefinitions.Clear();
theGrid.ColumnDefinitions.Clear();

for (uint i = 0; i < theNumberOfRows; i++)
theGrid.RowDefinitions.Add(new RowDefinition());

for (uint i = 0; i < theNumberOfCols; i++)
theGrid.ColumnDefinitions.Add(new ColumnDefinition());

为此,当然,我需要找到网格。我在 SO 问题中使用了 CrimsonX 的 FindChild WPF ways to find controls首先定位 itemsControl1,然后将其用作父项,定位 theGrid。
    Grid FindTheGrid()
{

ItemsControl ic = (ItemsControl)this.FindName("itemsControl1");
Grid theGrid = FindChild<Grid>(ic, "theGrid");

}

这在从按钮的单击事件处理程序调用时起作用。但是,当从 MainWindow 的构造函数调用时它会失败,因为 ic 的 childrenCount 为 0。
int childrenCount = VisualTreeHelper.GetChildrenCount(theParent);

那么,如何在向用户显示窗口之前设置 theGrid 的行和列集合?

最佳答案

WPF 在后台为 ItemsControl 的项目(通常是 DataTemplate)生成“容器”,它们不会立即可用。

了解项目何时可用的唯一方法是订阅 ItemsControl 的 ItemContainerGenerator 属性上的 StatusChanged 事件:

itemsControl1.ItemContainerGenerator.StatusChanged += ic_GeneratorStatusChanged;

...然后从事件处理程序中取消订阅,因为您只需要它触发一次:
void ic_GeneratorStatusChanged(object sender, EventArgs e)
{

if (itemsControl1.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
return;

itemsControl1.ItemContainerGenerator.StatusChanged -= ic_GeneratorStatusChanged;

// your items are now generated
}

这是一种迂回的做事方式,当然,但这是知道 ItemsControl 的项目存在于可视化树中的唯一方法。

关于wpf - ItemsControl 在 MainWindow 的构造函数期间没有子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8721245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com