[WPF] Win7 и custom panel тормозит
От: Glas  
Дата: 20.04.11 17:07
Оценка:
Есть custom panel. На ней 4 элемента. На winXP все прорисовывается на ходу. На Win7 с тормозами, в чем может быть причина?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MyNamespace
{
    public class Panel4View : Panel
    {
        private double _mainWindowWidth = 0;
        private const double _margin = 5;

        protected override Size MeasureOverride(Size availableSize)
        {
            double curX = 0;
            double curY = 0;

            foreach (UIElement child in Children)
            {
                if (((System.Windows.Forms.Integration.WindowsFormsHost)child).Name == _mainHostName)
                {
                    if (availableSize.Height < availableSize.Width)
                    {
                        _mainWindowWidth = availableSize.Height - _margin;
                        child.Measure(new Size(_mainWindowWidth, _mainWindowWidth));
                    }
                    else
                    {
                        _mainWindowWidth = availableSize.Width * 0.7 - _margin;
                        child.Measure(new Size(_mainWindowWidth, _mainWindowWidth));
                    }

                    curX += child.DesiredSize.Width;
                }
                else
                {
                    double width = availableSize.Width - _mainWindowWidth - _margin;
                    double height = (_mainWindowWidth - 2 * _margin) / 3;
                    child.Measure(new Size(width, height));
                }
            }

            return availableSize;
        }

        protected override Size ArrangeOverride(Size finalSize)
        {
            if (this.Children == null || this.Children.Count == 0)
                return finalSize;

            double curX = 0;
            double curY = 0;

            foreach (UIElement child in Children)
            {
                if (((System.Windows.Forms.Integration.WindowsFormsHost)child).Name == _mainHostName)
                {
                        child.Arrange(new Rect(0, 0, child.DesiredSize.Width, child.DesiredSize.Height));
                        curX += child.DesiredSize.Width;
                }
                else
                {
                    child.Arrange(new Rect(curX + _margin, curY, child.DesiredSize.Width, child.DesiredSize.Height));
                    curY += child.DesiredSize.Height + _margin;
                }
            }

            return finalSize;
        }
        
        protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
        {
            base.OnRenderSizeChanged(sizeInfo);
            MeasureOverride(sizeInfo.NewSize);
            ArrangeOverride(sizeInfo.NewSize);
        }
    }
}
Re: [WPF] Win7 и custom panel тормозит
От: notacat  
Дата: 20.04.11 17:29
Оценка:
а зачем OnRenderSizeChanged у вас? Попробуйте его просто убрать. И в MeasureOverride уберите из цикла все, кроме child.Measure
Re[2]: [WPF] Win7 и custom panel тормозит
От: Glas  
Дата: 20.04.11 18:49
Оценка:
Здравствуйте, notacat, Вы писали:

N>а зачем OnRenderSizeChanged у вас? Попробуйте его просто убрать. И в MeasureOverride уберите из цикла все, кроме child.Measure


Да, лишний OnRenderSizeChanged.

Все равно тормозит.
Re[3]: [WPF] Win7 и custom panel тормозит
От: notacat  
Дата: 20.04.11 18:54
Оценка:
G>Все равно тормозит.
Тогда зачистите циклы и смотрите дальше, что за 4 элемента, которые у вас на этой панели, что за контейнер, в котором эта панель лежит. Тормозить же может и что-то вне панели
Re: [WPF] Win7 и custom panel тормозит
От: vit_as Россия  
Дата: 20.04.11 19:18
Оценка:
Здравствуйте, Glas, Вы писали:

G>Есть custom panel. На ней 4 элемента. На winXP все прорисовывается на ходу. На Win7 с тормозами, в чем может быть причина?


Загрузка процессора полная?
Был замечен глюк на теме Aero, когда на панели располагались контролы со скроллами, у которых Visibility = Auto. Если есть таковые, то поставьте свойства VerticalScrollBarVisibility = Visible и HorizontalScrollBarVisibility = Visible.
Re[4]: [WPF] Win7 и custom panel тормозит
От: Glas  
Дата: 20.04.11 19:45
Оценка:
Здравствуйте, notacat, Вы писали:

G>>Все равно тормозит.

N>Тогда зачистите циклы и смотрите дальше, что за 4 элемента, которые у вас на этой панели, что за контейнер, в котором эта панель лежит. Тормозить же может и что-то вне панели

Да уже копаю в сторону UserControl'a как бы заставить его растягиваться...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.