【问题标题】:Find control in templated WPF datagrid [duplicate]在模板化的 WPF 数据网格中查找控件 [重复]
【发布时间】:2025-12-20 23:35:11
【问题描述】:

可能重复:
get value of checkbox from datagrid? C#

我正在尝试在模板化 DataGrid 中的选定行内查找控件。

 <DataGridTemplateColumn Header="Local">
                 <DataGridTemplateColumn.CellTemplate>
                      <DataTemplate>
                           <CheckBox Name="chkImport"  IsChecked="{Binding IsLocalized}"></CheckBox>
                                    </DataTemplate>
                                </DataGridTemplateColumn.CellTemplate>
                            </DataGridTemplateColumn>

我正在尝试以下代码:

   var selectedRow = (DataGridRow) gridFileScan.ItemContainerGenerator.ContainerFromItem(gridFileScan.SelectedItem);                           

   CheckBox chkImport = FindVisualChild<CheckBox>(selectedRow);

但 chkImport 始终为空。有什么想法吗??

【问题讨论】:

标签: wpf wpfdatagrid


【解决方案1】:

当您调试时,您应该能够看到该方法递归 VisualTree。

您可以使用the Visual Tree Visualizer查看可视化树

FindVisualChild 的实现可能存在缺陷,或者 VisualTree 看起来不像您所期望的那样。

【讨论】:

  • 谢谢尔诺。我不知道这个工具存在。无论如何,DataGridRow 是空的。我不知道为什么!!请参阅此屏幕截图img11.imageshack.us/img11/6082/visualtree.png 我正在处理 SelectionChanged 事件。
  • 是的,当然。但不是在我正在执行我的代码的事件 SelectionChanged 中。我正在向 ItemSource 添加一些额外的项目,但它们没有出现在此事件中。
【解决方案2】:

找到了。我只需要在修改 ItemsSource 后调用这个方法:

  gridFileScan.UpdateLayout();

【讨论】: