我有一个带可扩展面板的WPF窗口(通过Expander
)。面板位于窗口的左侧,展开后窗口会增大以适应内容。
默认情况下,窗口固定在左上角,因此我的窗口会向右移动。我希望窗户能够向左延伸。
我尝试在Window.SizeChanged
事件中执行以下操作:
private void onWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
Left -= (e.NewSize.Width - e.PreviousSize.Width)
}
它有效,但增长不稳定,我想找到一个更顺畅的解决方案。
答案 0 :(得分:4)
我设法通过一个简单的解决方案克服了这个问题:隐藏&展。
以下是代码:
protected override void OnRenderSizeChanged(SizeChangeInfo sizeInfo)
{
if (!sizeInfo.WidthChanged)
{
base.OnRenderSizeChanged(sizeInfo);
return;
}
Hide();
base.OnRenderSizeChanged(sizeInfo);
Left -= (sizeInfo.NewSize.Width - sizeInfo.PreviousSize.Width);
Show();
}
我使用Window.SizeChanged
的覆盖替换了FrameworkElement.OnRenderSizeChanged
的事件处理程序。
答案 1 :(得分:2)
我没有尝试让Window像你要求的那样向左增长,但是如果其他所有方法都失败了,我会考虑模仿按钮看起来像扩展按钮。然后,不要尝试让窗口向左增长,而是使用Transforms在主窗口的左侧生成一个新窗口。
<强>更新强>
嗯,糟糕的渲染性能可能与视频卡相关,布局(过于复杂)相关,或两者兼而有之。我有一个想法,可能会为你做的伎俩。 Jeff Prosise在Silverlight上发表了一篇关于放大镜的博文,该放大镜使用WriteableBitmap
来达到预期的效果。我想,“为什么不使用WriteableBitmap在Expander右侧创建布局的屏幕截图,并用它掩盖其他元素?”。我认为如果你这样做并隐藏底层元素(因此它们不会被调整),渲染性能将大大提高。
我让Jeff的代码在WPF中工作,几乎没有修改。
答案 2 :(得分:1)
解决方案1
尝试使用Window属性:SizeToContent =“width”这会将窗口缩放到您的内容大小,您可以使用动画和缓动来缩放内容,这将使窗口的缩放变得美观和流畅。
解决方案2
您可以创建一个比其内容更大的窗口,并使您的背景透明。您仍然需要为某个元素添加背景。
以下是它的外观示例:
答案 3 :(得分:0)
您可以将扩展器放在网格中(列大小可以更改),然后将扩展器的ExpandDirection属性设置为左?