1.代码部分
cs
//Listbox--Name wList
private void Page_Loaded(object sender, RoutedEventArgs e)
{
BoatIdVM.Instance.Active(null);
if (Setting5VM.Instance.DicCanExecute["BoatID33"](null))
{
DG.IsReadOnly = false;
for (int i = 0; i < wList.Items.Count; i++)
{
var itemContainer = wList.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
if (itemContainer != null)
{
var button = FindVisualChild<Button>(itemContainer);
if (button != null)
{
button.IsEnabled = true;
}
}
}
}
else
{
DG.IsReadOnly = true;//只读
for (int i = 0; i < wList.Items.Count; i++)
{
var itemContainer = wList.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
if (itemContainer != null)
{
var button = FindVisualChild<Button>(itemContainer);
if (button != null)
{
button.IsEnabled = false;
}
}
}
}
}
// FindVisualChild方法用于在VisualTree中查找指定类型的子元素
private T FindVisualChild<T>(DependencyObject parent) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
if (child is T typedChild)
{
return typedChild;
}
var result = FindVisualChild<T>(child);
if (result != null)
{
return result;
}
}
return null;
}
2.小结
上述代码完成对于可视化树下面子控件的遍历,日常使用记录