第一次选择组合框中的项目时,应用程序崩溃在网格中以编程方式定义,该网格被添加为堆栈面板的子级

问题描述 投票:0回答:1

运行我的应用程序时,我在Zebra平板电脑t55上出现以下错误:

PerfectDelivery.exe中0x00007FFEA4A22D45(Windows.UI.Xaml.dll)的未处理异常:0xC000041D:在用户回调期间遇到未处理的异常。

它在我加载所有sqlite数据库并在第一次运行应用程序后发生。崩溃后我再次启动应用程序,它运行正常。违规的Combobox在这里:

     private void InitProducts()
    {
        StpProducts.Children.Clear();
        _lstItemsInMultipleCrates = new List<int>();
        Invoice deliveryDetails = new Invoice(((App)Application.Current).OrderId);
        ItemsInCrate = new List<InvoiceItem>();
        if (_selectedCrate != null)
        {
            btnFinishCrate.Visibility = Visibility.Visible;
            foreach (InvoiceItem i in deliveryDetails.InvoiceItems.Where(
                x => x.CrateNumber.CrateId == _selectedCrate))
            {
                ItemsInCrate.Add(i);

                GridProducts = new Grid();

                GridProducts.Height = 35;
                GridProducts.Width = 600;
                GridProducts.HorizontalAlignment = HorizontalAlignment.Left;

                ColumnDefinition cdProductName = new ColumnDefinition();
                cdProductName.Width = new GridLength(170, GridUnitType.Star);
                ColumnDefinition cdQty = new ColumnDefinition();
                cdQty.Width = new GridLength(45, GridUnitType.Star);
                ColumnDefinition cdUnits = new ColumnDefinition();
                cdUnits.Width = new GridLength(60, GridUnitType.Star);
                ColumnDefinition cdChecked = new ColumnDefinition();
                cdChecked.Width = new GridLength(30, GridUnitType.Star);
                ColumnDefinition cdDropdown = new ColumnDefinition();
                cdDropdown.Width = new GridLength(80, GridUnitType.Star);
                ColumnDefinition cdFiller = new ColumnDefinition();
                cdFiller.Width = new GridLength(1, GridUnitType.Star);

                RowDefinition row = new RowDefinition();
                row.Height = new GridLength(35, GridUnitType.Star);

                GridProducts.ColumnDefinitions.Add(cdProductName);
                GridProducts.ColumnDefinitions.Add(cdQty);
                GridProducts.ColumnDefinitions.Add(cdUnits);
                GridProducts.ColumnDefinitions.Add(cdChecked);
                GridProducts.ColumnDefinitions.Add(cdDropdown);



                TextBlock txbOrderDetailPickedId = new TextBlock { Name = "ODPID" };
                txbOrderDetailPickedId.Text = i.OrderDetailPickedId.ToString("G");
                txbOrderDetailPickedId.Visibility = Visibility.Collapsed;

                TextBlock txbOriginalQty = new TextBlock { Name = "OQ" };
                txbOriginalQty.Text = i.Quantity.ToString("N");
                txbOriginalQty.Visibility = Visibility.Collapsed;


                List<long?> lstCrateCount = new List<long?>();
                foreach (InvoiceItem crateCount in deliveryDetails.InvoiceItems.Where(x => x.CrateNumber.OrderDetailPickedId == i.OrderDetailPickedId))
                {

                    lstCrateCount.Add(crateCount.CrateNumber.CrateId);


                }// return count of crates for item. If > 1 display crate number(s)
                TextBlock txbProductName = new TextBlock();


                TextBox txbQuantity = new TextBox();
                txbQuantity.Text = i.Quantity.ToString("N");
                txbQuantity.Height = 35;

                InputScope scope = new InputScope();
                InputScopeName scopeName = new InputScopeName { NameValue = InputScopeNameValue.Number };
                scope.Names.Add(scopeName);
                txbQuantity.InputScope = scope;

                TextBlock txbUnits = new TextBlock();
                txbUnits.Text = i.PackDescription;
                txbUnits.HorizontalTextAlignment = TextAlignment.Center;
                txbUnits.VerticalAlignment = VerticalAlignment.Center;

                CheckBox chkChecked = new CheckBox();

            ---> CmbDiscrepancies = new ComboBox{ SelectedIndex = -1};

                if (CmbDiscrepancies?.Items != null)
                {
                    CmbDiscrepancies.Items.Add("Correct");
                    CmbDiscrepancies.Items.Add("Damaged");
                    CmbDiscrepancies.Items.Add("Missing");
                    CmbDiscrepancies.Items.Add("Wrong Item");
                    CmbDiscrepancies.Items.Add("Out of Stock");
                    CmbDiscrepancies.Items.Add("Incorrect Amt");
                }

                CmbDiscrepancies.SelectedIndex = 0;
                CmbDiscrepancies.VerticalAlignment = VerticalAlignment.Center;*

                if (lstCrateCount.Count == 1)
                {
                    txbProductName.Text = i.ProductName;

                }
                else if (!Crate.ItemInMultipleCrates(i.OrderDetailPickedId))
                {

                    _lstItemsInMultipleCrates.Add(i.OrderDetailPickedId);

                    txbProductName.TextWrapping = TextWrapping.Wrap;
                    txbProductName.Text = i.ProductName + "\r\n" + "(";
                    int count = 0;
                    foreach (long? crate in lstCrateCount)
                    {
                        count++;
                        txbProductName.Text += count != lstCrateCount.Count ? crate + ", " : crate + ")\r\nQty is the total in all crates listed above.";
                    }

                    GridProducts.Height = 50 * (lstCrateCount.Count * .66);

                    row.Height = new GridLength(GridProducts.Height, GridUnitType.Pixel);

                }

                if (Crate.ItemInMultipleCrates(i.OrderDetailPickedId))
                {
                    txbProductName.Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
                    CmbDiscrepancies.IsEnabled = false;
                    txbQuantity.IsEnabled = false;
                    if (_lstItemsInMultipleCrates.Count > 0)
                        GridProducts.Height = 35 * (_lstItemsInMultipleCrates.Count * 1.32);
                    else
                    {
                        GridProducts.Height = 35 * 1.32;
                    }
                    row.Height = new GridLength(GridProducts.Height, GridUnitType.Pixel);
                    txbProductName.Text = i.ProductName + "\r\n" + "(Item is in multiple crates)";
                    chkChecked.IsChecked = true;
                    chkChecked.IsEnabled = false;

                }

                GridProducts.Children.Add(txbOriginalQty);
                GridProducts.Children.Add(txbOrderDetailPickedId);
                GridProducts.Children.Add(txbProductName);
                GridProducts.Children.Add(txbQuantity);
                GridProducts.Children.Add(txbUnits);
                GridProducts.Children.Add(chkChecked);
                GridProducts.Children.Add(CmbDiscrepancies);

                Grid.SetColumn(txbProductName, 0);
                Grid.SetColumn(txbQuantity, 1);
                Grid.SetColumn(txbUnits, 2);
                Grid.SetColumn(chkChecked, 3);
                Grid.SetColumn(CmbDiscrepancies, 4);

                Grid.SetRow(txbProductName, 0);
                Grid.SetRow(txbQuantity, 0);
                Grid.SetRow(txbUnits, 0);
                Grid.SetRow(chkChecked, 0);
                Grid.SetRow(CmbDiscrepancies, 0);
                GridProducts.RowDefinitions.Add(row);


                StpProducts.Children.Add(GridProducts);

            }


        }

XAML是

         <ScrollViewer x:Name="ScvProducts" HorizontalAlignment="Left" Height="354" Margin="375,146,0,0" VerticalAlignment="Top" Width="638" BorderBrush="#FF1B933C" BorderThickness="2" >
        <StackPanel x:Name="StpProducts" MinHeight="450" Width="612" HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical" Height="995" >

                <Grid x:Name="GridProducts">
                    <ComboBox x:Name="CmbDiscrepancies" Visibility></ComboBox>
                </Grid>

        </StackPanel>
    </ScrollViewer>
combobox uwp stackpanel
1个回答
0
投票

从Windows 10 1709升级到1803修复了现有代码。我也摆脱了堆栈面板并动态添加行定义,似乎已经解决了1709版本。

© www.soinside.com 2019 - 2024. All rights reserved.