好的,这已被多次询问,但我找不到合适的解决方案。我有像这样定义的datagrid:
<DataGrid AutoGenerateColumns="False"
IsReadOnly="True"
Name="InputDocItemsDataGrid"
ItemsSource="{Binding Path= InputItems}"
SelectedItem="{Binding Path= InputItem, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="InputDocItemsDataGrid_SelectionChanged"
PreviewMouseLeftButtonDown="InputDocItemsDataGrid_PreviewMouseLeftButtonDown">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserReorder="False" CanUserResize="False">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Name="cbxAll" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="cbxAll_Checked" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="cbxSingleRow" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" PreviewMouseLeftButtonDown="cbxSingleRow_PreviewMouseLeftButtonDown" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我在这里只添加了这个模板列,因为它是感兴趣的点。所以我想要管理的是访问checkobx“cbxSingleRow”,因为它在datagrid之外,所以我可以用它做所有常规的东西,比如:cbxSingleRow.IsEnabled = false;
那么如何获得该复选框?
答案 0 :(得分:1)
您可以在VisualTreeHelper
课程的帮助下获得该作品。
将此方法移动到某个实用程序类中,以便可以重复使用。
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj,
string name) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T &&
(child as FrameworkElement).Name.Equals(name))
{
yield return (T)child;
}
foreach (T childOfChild in FindVisualChildren<T>(child, name))
{
yield return childOfChild;
}
}
}
}
用法:
foreach (CheckBox checkBox in UtilityFunctions.
FindVisualChildren<CheckBox>(InputDocItemsDataGrid, "cbxSingleRow"))
{
checkBox.IsChecked = true;
}