После ответа Bala R кажется, что вы пытаетесь реализовать свою собственную WrapPanel.
Существует встроенная WrapPanel, которая делает такие вещи автоматически переупорядочивая элементы управления "слева направо", затем изсверху вниз "или" сверху вниз, затем слева направо ".Тогда вам больше не нужно «следить» за видимостью ваших кнопок, поскольку, как только одна из них не видна (свернута), другие сразу же занимают место, занятое последними, прежде чем следовать шаблону, описанному выше.
быстрый и грязный пример для иллюстрации, не стесняйтесь играть с ориентацией WrapPanel и состоянием Свернутой / Скрытой кнопки:
XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="31*" />
<RowDefinition Height="731*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="284*" />
<ColumnDefinition Width="294*" />
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<Button x:Name="hideBtn" Content="HIDE button #" Click="hideBtn_Click"></Button>
<TextBox x:Name="buttonNumber" Width="50"></TextBox>
<RadioButton x:Name="radioCollapsed" Content="Collapsed" IsChecked="True"></RadioButton>
<RadioButton x:Name="radioHidden" Content="Hidden"></RadioButton>
</StackPanel>
<WrapPanel x:Name="wp" Orientation="Horizontal" Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Left" Height="74" Width="61">
<Button x:Name="b_1" Content="B1"></Button>
<Button x:Name="b_2" Content="B2"></Button>
<Button x:Name="b_3" Content="B3"></Button>
<Button x:Name="b_4" Content="B4"></Button>
<Button x:Name="b_5" Content="B5"></Button>
<Button x:Name="b_6" Content="B6"></Button>
<Button x:Name="b_7" Content="B7"></Button>
<Button x:Name="b_8" Content="B8"></Button>
<Button x:Name="b_9" Content="B9"></Button>
</WrapPanel>
</Grid>
Код позади:
private void hideBtn_Click(object sender, RoutedEventArgs e)
{
foreach (var child in wp.Children)
{
var btn = (Button)child;
btn.Visibility = Visibility.Visible;
}
foreach (var child in wp.Children)
{
var btn = (Button)child;
if (btn.Name.Contains(buttonNumber.Text))
{
if (radioCollapsed.IsChecked.Value)
btn.Visibility = Visibility.Collapsed;
else
btn.Visibility = Visibility.Hidden;
}
}
}