【发布时间】:2017-06-05 11:57:48
【问题描述】:
我花了过去一小时试图弄清楚这一点。我在DataGrid 中有一个CheckBox,如下所示:
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox Name="chkall" Content="Select All" Checked="chkall_Checked" Unchecked="chkall_Unchecked"/>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding Path=id}" x:Name="chksingle" Checked="chksingle_Checked" Unchecked="chksingle_Unchecked"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
如您所见,当标题中的 CheckBox 被选中或未选中时,我正在尝试检查和取消选中 DataGrid 行内的 CheckBoxes。这是我试图检索 CheckBox 并将其标记为已选中的代码:
private void chkall_Checked(object sender, RoutedEventArgs e)
{
foreach (var r in userDG.Items)
{
DataGridRow row =(DataGridRow)userDG.ItemContainerGenerator.ContainerFromItem(r);
FrameworkElement FW_element = userDG.Columns[0].GetCellContent(row);
FW_element.ApplyTemplate();
var checkbox = FW_element.FindName("chksingle") as CheckBox;
checkbox.IsChecked = false;
}
}
我已经尝试过RegisterName() 方法,我也尝试过VisualTreeHelper,但没有任何效果。
这一行总是返回null:
var checkbox = FW_element.FindName("chksingle") as CheckBox;
这是我的FrameworkElement 的WPF 可视化工具屏幕截图,我可以清楚地看到我要查找的复选框:
请告诉我我做错了什么?谢谢。
【问题讨论】:
标签: c# wpf datagrid datatemplate