C# 在网格wpf中自动更新按钮位置
我有3*3的网格,里面有9个按钮。这些按钮的可用性是在运行时确定的,所以按钮必须安排在可用空间中 例如: b1 b2 b3 b4 b5 b6 b7 b8 b9 如果b5按钮不可用,那么我必须这样做 b1 b2 b3 b4 b6 b7 b8 b9C# 在网格wpf中自动更新按钮位置,c#,wpf,grid,C#,Wpf,Grid,我有3*3的网格,里面有9个按钮。这些按钮的可用性是在运行时确定的,所以按钮必须安排在可用空间中 例如: b1 b2 b3 b4 b5 b6 b7 b8 b9 如果b5按钮不可用,那么我必须这样做 b1 b2 b3 b4 b6 b7 b8 b9 当前,在Visibly更新处理程序中,我正在检查所有控件的状态并更改grid.row和grid.column。有更好的方法吗?按照Bala R的回答,您似乎正在尝试实现自己的WrapPanel 有一个内置的WrapPanel,它可以自动地重新排列控件“从
当前,在Visibly更新处理程序中,我正在检查所有控件的状态并更改grid.row和grid.column。有更好的方法吗?按照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>
尝试UniformGrid并将列和行设置为3。它将按照您刚才描述的方式自动填充网格。您是否考虑过使用a而不是网格?@Bala+1这似乎正是包裹面板的功能
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;
}
}
}