2012-04-05 2 views
0

사용자가 프로덕션 데이터를 입력 할 수있는 WPF 응용 프로그램이 있습니다.WPF 성능 문제

그런 이유로 나는 WPF 툴킷 아코디언을 사용하는 Usercontrol을 만들었습니다. 뒤에 코드에서 나는 15 아코디언 항목을 만듭니다. 각 항목에는 Stackpanel과 5-10 개의 텍스트 상자가 있습니다.

이러한 콘트롤 중 12 개를 콘텐트 콘트롤에 추가하면 약 10 초가 걸립니다.

이 동작의 원인은 무엇입니까?

public XXXMeasurementControl(Measurement meas) 
    { 

     InitializeComponent(); 


     if (meas.ID == -2) 
     { 
      LineNameTextBlock.Text = "Total"; 
     } 
     else 
     { 
      LineNameTextBlock.Text = meas.MeasureDate.ToString("HH:mm") + " - " + meas.MeasureDate.AddHours(1).ToString("HH:mm"); 
     } 



     this.cells = meas.MainCells; 
     this.meas = meas; 


     Binding b = new Binding(); 
     Remark.DataContext = Meas; 
     b.Mode = BindingMode.TwoWay; 
     b.Path = new PropertyPath("Remark"); 
     BindingOperations.SetBinding(Remark, TextBox.TextProperty, b); 

     //Create Cells Start 

     foreach (Cell c in cells) 
     { 
      //Creating Textboxes & Bindings for Stations from Maincells 

      if (c.Name != "OQC") 
      { 

       //Setting Qualified Overall (=Qualified from Cell Appearance Check) 

       Common.BindTextBlock(QualifiedOverallTextBlock, c, "Qualified"); 

       if (c.Name.Contains("Appearance Check")) 
        Common.BindTextBlock(QualifiedOverallTextBlock, c, "Qualified"); 

       //Setting Scrap Rate (=Waste from Cell Acoustic Test) 

       if (c.Name.Contains("Acoustic Test")) 
         Common.BindTextBlock(ScrapRateTextBlock, c, "WasteRate"); 

       AccordionItem aci = new AccordionItem(); 

       StackPanel sp = new StackPanel(); 
       StackPanel groupData = new StackPanel(); 
       StackPanel all = new StackPanel(); 
       all.Children.Add(sp); 
       all.Children.Add(groupData); 

       if (c.Stations != null) 

        //All Single Cell Line Controls 

        if (meas.ID != -2) 
        { 
         for (int i = 0; i < c.Stations.Count; i++) 
         { 
          NumberTextbox t = Common.CreateNumberTextbox(c.Stations[i], "Value", BindingMode.TwoWay, false, null, 80, 22); 

          t.LostFocus += new RoutedEventHandler(t_LostFocus); 

          c.Stations[i].PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(LineControl_PropertyChanged); 

          //Handling if Qualified Field is Editable 

          if (c.Stations[i].Name.Contains("Qualified")) 
          { 
           t.Background = new SolidColorBrush(Colors.BlanchedAlmond); 
           groupData.Children.Add(t); 

          } 
          else 
          { 
           sp.Children.Add(t); 
          } 

         } 
        } 


       groupData.Children.Add(Common.CreateNumberTextbox(c, "RejectQty", BindingMode.OneWay, true,null, 80, 22)); 
       groupData.Children.Add(Common.CreateNumberTextbox(c, "PassRate", BindingMode.OneWay, true, new SolidColorBrush(Colors.BlanchedAlmond), 80, 22)); 
       groupData.Children.Add(Common.CreateNumberTextbox(c, "RejectRate", BindingMode.OneWay, true, new SolidColorBrush(Colors.BlanchedAlmond), 80, 22)); 

       aci.Header = ""; 
       aci.Content = all; 
       MainCellsAccordion.Items.Add(aci); 

      } 
     } 
    } 

답변

1

나도 WPF 툴킷의 아코디언 컨트롤 끔찍한 성능을 경험한다. 탭 내에서 Accordion 컨트롤을 가지고 있으며 그 탭으로 전환 할 때마다 내용을 초기화하는 데 2-3 초가 걸립니다. 아코디언 컨트롤을 사용하지 않을 때는이 문제가 발생하지 않습니다.

나는 아코디언이 당신의 범인이라고 생각합니다.