如何解决隐藏在StackPanel中时更改元素位置
我必须在垂直放置的GroupBox
内放置两个StackPanel
,并在两种状态(选中和未选中)中隐藏其中一个组框的CheckBox
。问题是我希望在同一位置显示可见的GroupBox
。
XAML代码:
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical" Margin="0,10">
<CheckBox x:Name="checkBox" Content="GroupBox 1" Checked="checkBox_Checked" Unchecked="checkBox_Unchecked"/>
<GroupBox x:Name="groupBox" Header="GroupBox" Height="163">
<Grid>
<StackPanel Orientation="Vertical">
<Label x:Name="label" Content="Label" Margin="10,10,0"/>
<Label x:Name="label1" Content="Label 1" Margin="10,0"/>
<Label x:Name="label2" Content="Label 2" Margin="10,0"/>
<Label x:Name="label3" Content="Label 3" Margin="10,0"/>
</StackPanel>
</Grid>
</GroupBox>
<GroupBox x:Name="groupBox1" Header="GroupBox 1">
<Grid>
<StackPanel Orientation="Vertical">
<Label x:Name="label4" Content="Label 4" Margin="10,0"/>
<Label x:Name="label5" Content="Label 5" Margin="10,0"/>
<Label x:Name="label6" Content="Label 6" Margin="10,0"/>
</StackPanel>
</Grid>
</GroupBox>
</StackPanel>
<GroupBox x:Name="groupBox2" Header="GroupBox 2">
<Grid>
<StackPanel Orientation="Vertical">
<Label x:Name="label7" Content="Label 7" Margin="10,0"/>
<Label x:Name="label8" Content="Label 8" Margin="10,0"/>
<Label x:Name="label9" Content="Label 9" Margin="10,0"/>
<Label x:Name="label10" Content="Label 10" Margin="10,0"/>
<Label x:Name="label11" Content="Label 11" Margin="10,0"/>
<Label x:Name="label12" Content="Label 12" Margin="10,0"/>
<Label x:Name="label13" Content="Label 13" Margin="10,0"/>
</StackPanel>
</Grid>
</GroupBox>
</StackPanel>
C#代码:
private void checkBox_Checked(object sender,RoutedEventArgs e)
{
groupBox.Visibility = Visibility.Hidden;
groupBox1.Visibility = Visibility.Visible;
}
private void checkBox_Unchecked(object sender,RoutedEventArgs e)
{
groupBox.Visibility = Visibility.Visible;
groupBox1.Visibility = Visibility.Hidden;
}
结果: 复选框未选中:
复选框已选中:
我不想让groupBox1
显示在较低的位置,而是希望它显示在与第一个groupBox
完全相同的位置
解决方法
这不适用于StackPanel,因为如其名称所示,StackPanel沿一个方向堆叠该项目。您可以使用Grid来实现所需的功能,只需将GroupBox放在同一行和同一列上即可。
,您必须将Visibility
设置为Collapsed
而不是隐藏。
private void checkBox_Checked(object sender,RoutedEventArgs e)
{
groupBox.Visibility = Visibility.Collapsed;
groupBox1.Visibility = Visibility.Visible;
}
private void checkBox_Unchecked(object sender,RoutedEventArgs e)
{
groupBox.Visibility = Visibility.Visible;
groupBox1.Visibility = Visibility.Collapsed;
}
查看Visibility
enum的这些值之间的差异。
-
Collapsed
不显示元素,并且不在布局中为其保留空间。
- 隐藏
不显示元素,但保留布局中的元素的空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。