[UPDATE]
//Wszystkie BT*numer* to obiekty Button utworzone w xaml
Z początku nie zwróciłem uwagi.
propozycja 1
private static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) 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)
yield return (T)child;
foreach (T childOfChild in FindVisualChildren<T>(child))
yield return childOfChild;
}
}
private void HideAllButtons()
{
foreach (Button btn in FindVisualChildren<Button>(this))
if (btn.Name.Contains("BT"))
btn.Visibility = Visibility.Hidden;
}
propozycja 2
private List<Control> GetAllControls()
{
Panel mainContainer = (Panel)this.Content;
UIElementCollection element = mainContainer.Children;
List<FrameworkElement> lstElement = element.Cast<FrameworkElement>().ToList();
return lstElement.OfType<Control>().ToList();
}
private void HideAllButtons()
{
foreach (Control contol in GetAllControls())
{
if (contol is Button)
if (contol.Name.Contains("BT"))
contol.Visibility = Visibility.Hidden;
}
}
P.S.1
private void ToggleAllButtons()
{
foreach (Button btn in FindVisualChildren<Button>(this))
if (btn.Name.Contains("BT"))
if (btn.Visibility == Visibility.Hidden)
btn.Visibility = Visibility.Visible;
else
btn.Visibility = Visibility.Hidden;
}
P.S.2 Trees in WPF
Możesz spróbować tak
for (int i=1; i<=20; i++)
{
Button btn = (Button)this.Controls["BT" + ((i < 10) ? '0' + i.ToString() : i.ToString())];
btn.Visible = false;
}
lub tak
foreach (Button btn in Controls.OfType<Button>())
if (btn.Name.Contains("BT"))
btn.Visible = false;