WPF根据窗口内容自动调整窗口大小

本文介绍了如何在WPF中利用Window.SizeToContent属性实现窗体根据内容自动调整大小的功能,以达到更好的布局效果。通过示例代码展示了如何创建一个固定宽度、高度可变的窗体,并演示了其运行效果。

在创建WPF窗体时,如果固定窗体宽高,在要显示内容很少或者很多的情况下,窗体布局就会显得不怎么好看。如果能根据窗口内容自动调整窗口大小会显得比较适宜,这时我们需要用到Window.SizeToContent属性。 

下面以固定宽度,高度可变为例,新建一个WPF窗体应用程序SizeToContentDemo。

1、窗体xaml

<Window x:Class="SizeToContentDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SizeToContentDemo"
        mc:Ignorable="d"
        WindowState="Normal" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"
        Title="SizeToContentDemo" Window.SizeToContent="Height" Width="500" Loaded="Window_Loaded">
    <Grid x:Name="Grid_Content" Margin="20,20,20,30">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="32"/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Vertical">
            <TextBlock Text="提示" HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="#333" FontSize="18" FontWeight="Black" />
            <TextBlock x:Name="ContentText" Text="提示内容" FontSize="12" Foreground="#666666" Margin="30,20,30,30" HorizontalAlignment="Center"
                           TextAlignment="Center" VerticalAlignment="Top" TextWrapping="Wrap"/>
        </StackPanel>
        <UniformGrid Rows="1" Width="300" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Bottom">
            <Button x:Name="SureBtn" Content="确定" Height="32" VerticalAlignment="Center" Margin="0,0,8,0" Click="SureBtn_Click"/>
            <Button x:Name="CancelBtn" Content="取消" Height="32" VerticalAlignment="Center" Margin="8,0,0,0"/>
        </UniformGrid>
    </Grid>
</Window>

2、交互逻辑

using System;
using System.Windows;

namespace SizeToContentDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.ContentText.Text = "是否关闭此窗体?";
            //this.ContentText.Text = "这是一个非常严重的误操作,继续运行将产生未知错误!" + "\r\n" + "要获取详细信息请与管理员联系。" + "\r\n" + "错误码:001" + "\r\n" + "是否关闭该程序?";
            this.Height = Grid_Content.ActualHeight;
        }

        private void SureBtn_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}

3、运行效果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RunnerDNA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值