C# 如何强制重新调整窗口大小?

C# 如何强制重新调整窗口大小?,c#,wpf,C#,Wpf,我在WPF(Height=“auto”Width=“auto”)中有一个自动大小的应用程序用户控件。当调整其中一组元素的大小时,窗口的渲染大小保持不变。如何强制它调整大小?我试过这行代码:Application.Current.MainWindow.SizeToContent=SizeToContent.width和height。编译器给我一个错误,没有与此调用关联的对象。我试过这一行MainWindowBorder.Height=Double.NaN以使其调整大小。也不走运。在XAML中使用S

我在WPF(Height=“auto”Width=“auto”)中有一个自动大小的应用程序用户控件。当调整其中一组元素的大小时,窗口的渲染大小保持不变。如何强制它调整大小?我试过这行代码:Application.Current.MainWindow.SizeToContent=SizeToContent.width和height。编译器给我一个错误,没有与此调用关联的对象。我试过这一行
MainWindowBorder.Height=Double.NaN以使其调整大小。也不走运。

在XAML中使用SizeToContent

SizeToContent="WidthAndHeight" 

在XAML中使用SizeToContent

SizeToContent="WidthAndHeight" 

如果所有内部控件都可以调整大小,但唯一需要调整大小的是窗口,那么这种简单的方法如何?希望这有帮助

int mycurrentscreenwidth = 1366;
int mycurrentwindowwidth = 1366;

var screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
var screenwidth = screen.Width;

if (Convert.ToInt32(screenwidth) < 1366)
{   
    double calculate_scalefactor= Convert.ToInt32(screenwidth) / (double)mycurrentscreenwidth;
    double newwidth_tobescaled = mycurrentwindowwidth * calculate_scalefactor;

    this.Width = newwidth_tobescaled;
}
int mycurrentscreenwidth=1366;
int mycurrentwindowwidth=1366;
var screen=System.Windows.Forms.screen.PrimaryScreen.Bounds;
var screenwidth=screen.Width;
if(转换为32(屏幕宽度)<1366)
{   
double calculate_scalefactor=转换为32(屏幕宽度)/(加倍)mycurrentscreenwidth;
double newwidth\u tobescaled=mycurrentwindowwidth*calculate\u scalefactor;
this.Width=newwidth\u要缩放;
}

如果所有内部控件都可以调整大小,但唯一需要调整大小的是窗口,那么这种简单的方法怎么样?希望这有帮助

int mycurrentscreenwidth = 1366;
int mycurrentwindowwidth = 1366;

var screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
var screenwidth = screen.Width;

if (Convert.ToInt32(screenwidth) < 1366)
{   
    double calculate_scalefactor= Convert.ToInt32(screenwidth) / (double)mycurrentscreenwidth;
    double newwidth_tobescaled = mycurrentwindowwidth * calculate_scalefactor;

    this.Width = newwidth_tobescaled;
}
int mycurrentscreenwidth=1366;
int mycurrentwindowwidth=1366;
var screen=System.Windows.Forms.screen.PrimaryScreen.Bounds;
var screenwidth=screen.Width;
if(转换为32(屏幕宽度)<1366)
{   
double calculate_scalefactor=转换为32(屏幕宽度)/(加倍)mycurrentscreenwidth;
double newwidth\u tobescaled=mycurrentwindowwidth*calculate\u scalefactor;
this.Width=newwidth\u要缩放;
}

要获取当前用户控件的窗口,请参阅:

然后使用:

Window yourParentWindow = Window.GetWindow(userControl);
yourParentWindow.SizeToContent = SizeToContent.WidthAndHeight;

要获取当前用户控件的窗口,请参阅:

然后使用:

Window yourParentWindow = Window.GetWindow(userControl);
yourParentWindow.SizeToContent = SizeToContent.WidthAndHeight;

您是否尝试过window.height-=您调整元素大小的数量您肯定可以跟踪所有内容的变化程度,并手动执行@Master117所提到的操作。根据您拥有的控件数量和它们的更改方式,整理代码可能有点单调乏味,但它肯定会工作。其中的所有元素都会自动重新调整大小。我在一系列网格中折叠或生成可见元素,因此如果不进行繁琐的计算,我无法手动更改大小。窗口包含这些自动调整大小的网格的集合。IIRC,您需要使窗口不可由用户调整大小。如果它是网格,我认为您需要将其粘贴到面板或类似的东西中,以便自动工作。不是100%确定。您是否尝试过window.height-=您调整元素大小的量您肯定可以跟踪所有内容的变化程度,并手动执行@Master117所提到的操作。根据您拥有的控件数量和它们的更改方式,整理代码可能有点单调乏味,但它肯定会工作。其中的所有元素都会自动重新调整大小。我在一系列网格中折叠或生成可见元素,因此如果不进行繁琐的计算,我无法手动更改大小。窗口包含这些自动调整大小的网格的集合。IIRC,您需要使窗口不可由用户调整大小。如果它是网格,我认为您需要将其粘贴到面板或类似的东西中,以便自动工作。不是100%确定。您不能将其放入XAML中。我曾尝试将其放在加载页面代码中(MainView()),但它给了我一个错误:不包含SizeToContent的定义,。另外,如果你读了我上面的问题,我说我已经在后面的代码中试过了。你不能吗?不是这样吗?啊,问题是我这样做是为了一个用户控件,而不是一个窗口。你不能把它放在XAML中。我曾尝试将其放在加载页面代码中(MainView()),但它给了我一个错误:不包含SizeToContent的定义,。另外,如果你读了我上面的问题,我说我已经在后面的代码中试过了。你不能吗?不是这样吗?啊,问题是我这样做是为了一个用户控件,而不是一个窗口。我必须调整用户控件的大小吗?可能会应用相同的逻辑。是否必须调整usercontrol的大小?同样的逻辑也可能适用。