我花了一個小時試圖弄清楚這一點。我有一個CheckBox
內DataGrid
如下:C# - FrameworkElement.FindName返回null
<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>
正如你可以看到我試圖檢查,並取消內DataGrid
行CheckBox
上課時,在標題中CheckBox
被選中或取消選中。這就是我試圖找回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;
這裏是一個WPF可視化截圖我FrameworkElement
,我可以清楚地看到,我試圖找到複選框:
請告訴我我做錯了什麼?謝謝。
謝謝你做的伎倆! –