代码之家  ›  专栏  ›  技术社区  ›  Omer Mor

WPF-向左展开窗口

  •  7
  • Omer Mor  · 技术社区  · 14 年前

    我有一个可扩展面板(通过 Expander ). 面板位于窗口的左侧,展开后窗口将增长以适合内容。

    默认情况下,窗口定位在左上角,因此我的窗口会向右扩展。我想让窗户向左边开。

    我试着做了以下几件事 Window.SizeChanged 事件:

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

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

    4 回复  |  直到 14 年前
        1
  •  4
  •   Omer Mor    12 年前

    我通过一个简单的解决方案成功地克服了这个问题:隐藏和显示。

    代码如下:

    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 .

        2
  •  2
  •   Dave    14 年前

    我没有试着让窗口像你所要求的那样向左扩展,但是如果其他方法都失败了,我会考虑模板化一个按钮,使其看起来像扩展按钮。然后,不要试图使窗口向左扩展,而是使用变换使新窗口向左扩展到主窗口。

    更新

    糟糕的渲染性能可能与视频卡相关,也可能与布局(过于复杂)相关,或者两者兼而有之。我有个主意可能对你有用。杰夫·普洛塞斯在博客中说,Silverlight中的一个放大镜使用 WriteableBitmap 达到预期效果。我想,“为什么不使用WriteableBitmap在扩展器的右边创建一个布局的截图,并用它覆盖其他元素呢?”。我认为,如果这样做并隐藏底层元素(这样它们就不会被调整),渲染性能将得到很大提高。

    我让Jeff的代码在WPF中工作,只需稍加修改。

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

        3
  •  1
  •   Vitalij    14 年前

    解决方案1

    解决方案2

    下面是一个示例,它可能看起来像: example image

        4
  •  0
  •   Gerrrard    14 年前

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