c# WPF窗口:错误的宽度和实际宽度值

本文关键字:WPF 窗口 错误 | 更新日期: 2023-09-27 18:02:01

我刚刚用c#写了一个小程序,可以在我的桌面上显示引号。我的问题是把应用程序的窗口居中。要计算窗口的所需位置,我使用以下公式:

        Left = (Screen.PrimaryScreen.Bounds.Width - this.ActualWidth) / 2;
        Top = (Screen.PrimaryScreen.Bounds.Height - this.ActualHeight) / 2;

不幸的是这个。ActualWidth这个。ActualHeight给出了错误的值,你可以在截图中看到。188,4和189代替1000(+)。

http://www.directupload.net/file/d/4044/4x2tgadg_png.htm

下面是GUI:

http://www.directupload.net/file/d/4044/63rx2sul_png.htm

文本形式的代码:

public partial class QuotePresenter : Window
{
    public QuotePresenter()
    {
        InitializeComponent();
        setSize();
    }
    private void setSize()
    {
        MaxWidth = Screen.PrimaryScreen.Bounds.Width * 0.8;
        MaxHeight = Screen.PrimaryScreen.Bounds.Height * 0.8;
    }
    private void setLocation()
    {
        Left = (Screen.PrimaryScreen.Bounds.Width - this.ActualWidth) / 2;
        Top = (Screen.PrimaryScreen.Bounds.Height - this.ActualHeight) / 2;
        System.Windows.MessageBox.Show("Actual Width: " + this.ActualWidth + "'nWidth: " + this.Width);
    }
    public void SetQuote(Quotation quote)
    {
        Dispatcher.Invoke(new Action(() =>
        {
            tb_content.Text = quote.Content;
            tb_author.Text = "- " + quote.Author;
            setLocation();
        }));
    }
}
谁能告诉我这里出了什么问题?

提前感谢!

c# WPF窗口:错误的宽度和实际宽度值

我看到你的代码有两个问题。首先,您试图在窗口调整大小以适应更新的文本之前获取窗口的新宽度。换句话说,您得到的是旧的宽度(在插入引号之前),而不是新的宽度。要强制窗口立即调整自己的大小,在setLocation()方法之前调用UpdateLayout()

第二个问题是你有一个潜在的单位不匹配。WPF窗口大小在布局单位中指定为1/96英寸(可能是一个像素,也可能不是一个像素,这取决于您的DPI设置)。但是桌面屏幕的分辨率是以像素为单位查询的。因此,根据用户的显示设置,你可能会混合单位,并以一个不正确的窗口位置结束。