7

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

默认情况下,窗口锚定在左上角,所以我的窗口向右增长。我希望窗口向左增长。

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

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

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

4

4 回答 4

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

于 2010-10-04T11:59:14.337 回答
2

我没有尝试让 Window 像您要求的那样向左增长,但如果一切都失败了,我会考虑将按钮模板化为看起来像扩展器按钮。然后,不要试图让您的窗口向左增长,而是使用变换使一个新窗口向您的主窗口的左侧增长。

更新

好吧,糟糕的渲染性能可能与显卡相关,布局(过于复杂)相关,或两者兼而有之。我有一个想法可能对你有用。Jeff Prosise 的博客介绍了 Silverlight 中的放大镜,它使用 aWriteableBitmap来达到预期的效果。我想,“为什么不使用 WriteableBitmap 在 Expander 右侧创建布局的屏幕截图,并用它掩盖其他元素?”。我认为如果你这样做并隐藏底层元素(这样它们就不会被调整),渲染性能将会大大提高。

我得到了 Jeff 的代码,只需稍加修改即可在 WPF 中工作。

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

于 2010-09-07T05:05:17.373 回答
1

解决方案 1

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

解决方案 2

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

以下是它的外观示例: 示例图像

于 2010-09-06T13:14:19.233 回答
0

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

于 2010-09-03T02:55:38.353 回答