0
我需要調整其父級手動調整大小的子窗口。 爲了做到這一點,我做了父窗口下面的代碼:WPF:設置子窗口大小programmaticaly
SizeChanged += (sender, e) =>
{
if (e.PreviousSize.Width != 0 && e.PreviousSize.Height != 0)
{
m_RatioX *= e.NewSize.Width/e.PreviousSize.Width;
m_RatioY *= e.NewSize.Height/e.PreviousSize.Height;
}
WPFWindow p = ((WPFWindow)sender);
foreach (WPFWindow w in p.OwnedWindows)
{
if (w.m_doStretch)
{
// this work fine
w.Left *= m_RatioX/w.m_RatioX;
w.Top *= m_RatioY/w.m_RatioY;
w.Canvas.RenderTransform = new ScaleTransform(m_RatioX, m_RatioY);
// but not for the size modification
w.Width *= m_RatioX/w.m_RatioX;
w.Height *= m_RatioY/w.m_RatioY;
w.m_RatioX = m_RatioX;
w.m_RatioY = m_RatioY;
}
}
};
線條
w.Width *= m_RatioX/w.m_RatioX;
w.Height *= m_RatioY/w.m_RatioY;
不會在這個意義上的作品,他們對孩子的窗口大小完全沒有影響。
經過一番研究,我也嘗試了以下兩種替代方案,但第一種方法對第二次崩潰時的窗口大小也沒有影響,其中NullReferenceException
。
// first alternative
Window.GetWindow(w).Width = Window.GetWindow(w).Width * m_RatioX/w.m_RatioX;
Window.GetWindow(w).Height = Window.GetWindow(w).Height * m_RatioY/w.m_RatioY;
// second one
Application.Current.MainWindow = w;
Application.Current.MainWindow.Width = Application.Current.MainWindow.Width * m_RatioX/w.m_RatioX;
Application.Current.MainWindow.Height = Application.Current.MainWindow.Height * m_RatioY/w.m_RatioY;
那麼,我應該如何修改子窗口的大小,以便它的渲染有效地調整大小?
編輯:
一些精度:
- 的
SizeChanged
處理程序僅在父窗口調用。 m_RatioX
和m_RatioY
默認值是1。
我檢查了你的原始代碼(沒有兩個選擇),它似乎工作正常。你需要檢查兩件事:1)只有當m_RatioX和m_RatioY的值不是0d時它才起作用。你的情況是什麼初始值? 2.)您是僅在父窗口還是在子窗口中訂閱'SizeChanged'?如果你正在處理子窗口中的'SizeChanged',那麼效果將以一種奇怪的光學方式級聯。 – haindl
另一種觀察:在第二種選擇中是什麼導致了'NullReferenceException'?如果'w'爲空,那麼你有一個更普遍的問題。 – haindl
我對第一條消息做了一些編輯,以澄清一些觀點。另外,''NullReferenceException'在試圖影響'w'到'Application.Current.MainWIndow'時引發,但'w'不是'null'(我確信)。 –