WPF - 向左展开窗口

时间:2010-08-31 08:13:07

标签: wpf resize expander

我有一个带可扩展面板的WPF窗口(通过Expander)。面板位于窗口的左侧,展开后窗口会增大以适应内容。

默认情况下,窗口固定在左上角,因此我的窗口会向右移动。我希望窗户能够向左延伸。

我尝试在Window.SizeChanged事件中执行以下操作:

private void onWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    Left -= (e.NewSize.Width - e.PreviousSize.Width)
}

它有效,但增长不稳定,我想找到一个更顺畅的解决方案。

4 个答案:

答案 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中工作,几乎没有修改。

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/10/29/more-fun-with-silverlight-3-s-writeablebitmap.aspx

答案 2 :(得分:1)

解决方案1 ​​

尝试使用Window属性:SizeToContent =“width”这会将窗口缩放到您的内容大小,您可以使用动画和缓动来缩放内容,这将使窗口的缩放变得美观和流畅。

解决方案2

您可以创建一个比其内容更大的窗口,并使您的背景透明。您仍然需要为某个元素添加背景。

以下是它的外观示例: example image

答案 3 :(得分:0)

您可以将扩展器放在网格中(列大小可以更改),然后将扩展器的ExpandDirection属性设置为左?