我有一个 WPF 应用程序,它允许用户输入生产数据。
出于这个原因,我创建了一个使用 WPF Toolkit Accordion 的用户控件。在 Code behind 中,我创建了 15 个 Accordion Items。每个项目都有一个堆栈面板和 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);
}
}
}