WPF - Развернуть окно слева - PullRequest
7 голосов
/ 31 августа 2010

У меня есть окно WPF с расширяемой панелью (через Expander).Панель находится в левой части окна, и при расширении окно увеличивается в соответствии с содержимым.

По умолчанию окна привязаны к верхнему левому углу, поэтому мое окно растет вправо.Я бы хотел, чтобы окно росло влево.

Я пытался сделать следующее в событии Window.SizeChanged:

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

, и оно работает, но рост прерывистый,и я хотел бы найти более плавное решение.

Ответы [ 4 ]

4 голосов
/ 04 октября 2010

Мне удалось преодолеть это с помощью простого решения: Hide & Show.

Вот код:

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 голосов
/ 07 сентября 2010

Я не пытался заставить окно расти влево, как то, что вы запрашиваете, но если все остальное не даст результата, я бы рассмотрел шаблон кнопки, похожей на кнопку расширения. Затем вместо того, чтобы пытаться заставить ваше Окно расти влево, увеличьте новое Окно слева от вашего основного Окна, используя Transforms.

UPDATE

Что ж, плохая производительность рендеринга может быть связана с видеокартой, макетом (слишком сложным) или и тем, и другим. У меня есть идея, которая может помочь вам. Джефф Просиз писал о лупе в Silverlight, которая использует WriteableBitmap для достижения желаемого эффекта. Я подумал: «Почему бы не использовать WriteableBitmap, чтобы создать скриншот вашего макета справа от Expander и прикрыть им другие элементы?». Я думаю, что если вы сделаете это и скроете базовые элементы (чтобы они не корректировались), производительность рендеринга значительно улучшится.

Я получил код Джеффа для работы в WPF с небольшими изменениями.

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

1 голос
/ 06 сентября 2010

Раствор 1

Попробуйте использовать свойство Window: SizeToContent = "width", это будет масштабировать ваше окно до размера вашего контента, и вы можете масштабировать ваш контент с помощью анимации и замедления, это сделает масштабирование окна красивым и плавным.

Раствор 2

Вы можете создать окно, которое больше, чем его содержимое, и сделать фон прозрачным. Вы все еще должны добавить фон к некоторому элементу.

Вот пример того, как это может выглядеть: example image

0 голосов
/ 03 сентября 2010

Вы можете поместить ваш расширитель в сетку (где размер столбца может измениться), а затем установить свойство ExpandDirection вашего расширителя влево?

...