You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF 点击按钮将窗口调整为该按钮尺寸并可恢复原尺寸的实现方法

实现方案

实现思路

优先选择你提到的第二种方案(隐藏其余控件),相比动态移除控件,无需处理控件状态恢复的问题,实现更简单也更稳定。
核心逻辑如下:

  • 提前定义3个变量存储状态:窗口原始宽度、窗口原始高度、窗口是否已收缩的标记位
  • 点击按钮时切换状态:
    • 首次点击(未收缩状态):先记录当前窗口的宽高作为原始值,将Grid内除目标按钮外的所有控件可见性设为Collapsed,设置窗口SizeToContent = SizeToContent.WidthAndHeight,窗口会自动适配到仅容纳按钮的尺寸
    • 再次点击(已收缩状态):将所有隐藏的控件可见性恢复为Visible,设置窗口SizeToContent = SizeToContent.Manual,将窗口宽高还原为之前存储的原始值即可

示例代码(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:09:03