WPF 点击按钮将窗口调整为该按钮尺寸并可恢复原尺寸的实现方法
实现方案
实现思路
优先选择你提到的第二种方案(隐藏其余控件),相比动态移除控件,无需处理控件状态恢复的问题,实现更简单也更稳定。
核心逻辑如下:
- 提前定义3个变量存储状态:窗口原始宽度、窗口原始高度、窗口是否已收缩的标记位
- 点击按钮时切换状态:
- 首次点击(未收缩状态):先记录当前窗口的宽高作为原始值,将Grid内除目标按钮外的所有控件可见性设为
Collapsed,设置窗口SizeToContent = SizeToContent.WidthAndHeight,窗口会自动适配到仅容纳按钮的尺寸 - 再次点击(已收缩状态):将所有隐藏的控件可见性恢复为
Visible,设置窗口SizeToContent = SizeToContent.Manual,将窗口宽高还原为之前存储的原始值即可
- 首次点击(未收缩状态):先记录当前窗口的宽高作为原始值,将Grid内除目标按钮外的所有控件可见性设为
示例代码(WPF)
XAML 代码
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="450" Width="800"> <Grid x:Name="MainGrid"> <Button x:Name="ToggleBtn" Content="切换尺寸" HorizontalAlignment="Left" Margin="20,20,0,0" VerticalAlignment="Top" Width="120" Height="45" Click="ToggleBtn_Click"/> <!-- 其余窗口控件示例 --> <TextBox Margin="20,80,20,20" Text="示例内容"/> <Button Content="其他按钮" Margin="20,0,0,20" HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="120" Height="45"/> </Grid> </Window>
后台C#代码
using System.Windows; using System.Windows.Controls; namespace WpfApp1 { public partial class MainWindow : Window { private double _originalWidth; private double _originalHeight; private bool _isShrinked = false; public MainWindow() { InitializeComponent(); } private void ToggleBtn_Click(object sender, RoutedEventArgs e) { if (!_isShrinked) { // 保存原始尺寸 _originalWidth = this.Width; _originalHeight = this.Height; // 隐藏Grid中除了ToggleBtn之外的所有控件 foreach (UIElement element in MainGrid.Children) { if (element != ToggleBtn) { element.Visibility = Visibility.Collapsed; } } // 让窗口自动适配内容尺寸 this.SizeToContent = SizeToContent.WidthAndHeight; _isShrinked = true; } else { // 恢复所有控件可见性 foreach (UIElement element in MainGrid.Children) { element.Visibility = Visibility.Visible; } // 恢复窗口原始尺寸 this.SizeToContent = SizeToContent.Manual; this.Width = _originalWidth; this.Height = _originalHeight; _isShrinked = false; } } } }
效果原型参考

内容的提问来源于stack exchange,提问作者Polazhenko
相关产品推荐
相关产品推荐

