【问题标题】:How do I force my window to re-size?如何强制我的窗口重新调整大小?
【发布时间】:2016-09-07 09:23:25
【问题描述】:

我在 WPF 中有一个自动调整大小的应用程序用户控件(Height="Auto" Width="Auto")。当其中的一堆元素被调整大小时,窗口保持相同的渲染大小。如何强制它调整大小?我在调整窗口内组件大小的函数中尝试了这一行Application.Current.MainWindow.SizeToContent = SizeToContent.WidthAndHeight;。编译器给我一个错误,没有与此调用关联的对象。我试过这条线MainWindowBorder.Height = Double.NaN; 来欺骗它调整大小。也没有运气。

【问题讨论】:

  • 您尝试过 window.height -= 调整元素大小的数量
  • 您绝对可以跟踪一切发生了多少变化,并按照@Master117 提到的方式手动完成。按顺序获取代码可能有点乏味,具体取决于您拥有多少控件以及它们如何更改,但它肯定会起作用。
  • 里面的所有元素都会自动调整大小。我在一系列网格中折叠或制作可见元素,因此如果没有繁琐的计算,我无法手动更改大小。该窗口包含这些自动调整大小的网格的集合。
  • IIRC,您需要将窗口设为非用户可调整大小。
  • 如果它是一个网格,我认为你需要将它粘贴到一个面板或类似的东西上,以便自动工作。不是 100% 确定。

标签: c# wpf


【解决方案1】:

【讨论】:

  • 你不能把它放在 XAML 中。我已经尝试将它放在我的加载页面代码后面(MainView()),但它给了我错误:不包含 SizeToContent 的定义。另外,如果您阅读了我上面的问题,我表示我已经在后面的代码中尝试过。
  • 你不能?不是这样吗?
  • 啊问题是我这样做是为了用户控件,而不是窗口。
【解决方案2】:

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

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;
}

【讨论】:

  • 必须调整用户控件的大小?可能会应用相同的逻辑。
【解决方案3】:

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

Access parent window from User Control

然后使用:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-29
    • 2014-02-15
    • 2018-09-25
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多