我需要在子窗口手动调整其父窗口大小时调整其大小。 为此,我在父窗口上创建了以下代码:
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。答案 0 :(得分:1)
好的,我找到了解决方案。
不应直接使用宽度/高度属性,而应使用相关的DependencyProperty
。
即,使用w.SetValue(Window.WidthProperty, <value>);
代替w.Width = <value>
。