I have a XAML defined stack panel that I'm adding rows to in the code behind. I create a combo box as part of the row and populate it. When I go to select an item from the combo box the first time after I launch the app, the app freezes then crashes. I restart the app and everything is fine. Any ideas?
I've tried setting the SelectedIndex to -1, the SelectItem to null and nothing seems to work
Sorry, I posted that rather quickly, it only does it on a tablet, and only the first time I select something in any combo box in my app. It works fine on Windows desktop. There is no processing of the items in the combo box at the point it crashes, as it is just selecting the item to be processed when the row is processed as a whole.
This is from the event viewer on the tablet:
Faulting application name: PerfectDelivery.exe, version: 1.0.0.0, time stamp: 0x5c619fb2
Faulting module name: Windows.UI.Xaml.dll, version: 10.0.16299.785, time stamp: 0xe6cb46c8
Exception code: 0xc0000005
Fault offset: 0x0000000000122de5
Faulting process id: 0x2700
Faulting application start time: 0x01d4c22567914db6
Faulting application path: C:\Program Files\WindowsApps\PerfectDelivery_1.0.66.0_x64__bvrsfg2gfbvmt\PerfectDelivery.exe
Faulting module path: C:\Windows\System32\Windows.UI.Xaml.dll
Report Id: d1b4b3cb-7c82-4e1e-925f-40a71435460c
Faulting package full name: PerfectDelivery_1.0.66.0_x64__bvrsfg2gfbvmt
Faulting package-relative application ID: App
private void InitProducts()
{
stpProducts.Children.Clear();
_lstItemsInMultipleCrates = new List<int>();
//List<int> 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);
Grid grdItemDetails = new Grid();
grdItemDetails.Height = 35;
grdItemDetails.Width = 600;
grdItemDetails.HorizontalAlignment = HorizontalAlignment.Left;
ColumnDefinition cdProductName = new ColumnDefinition();
cdProductName.Width = new GridLength(140, GridUnitType.Star);
ColumnDefinition cdQty = new ColumnDefinition();
cdQty.Width = new GridLength(40, 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);
RowDefinition row = new RowDefinition();
row.Height = new GridLength(35, GridUnitType.Pixel);
grdItemDetails.ColumnDefinitions.Add(cdProductName);
grdItemDetails.ColumnDefinitions.Add(cdQty);
grdItemDetails.ColumnDefinitions.Add(cdUnits);
grdItemDetails.ColumnDefinitions.Add(cdChecked);
grdItemDetails.ColumnDefinitions.Add(cdDropdown);
grdItemDetails.RowDefinitions.Add(row);
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);
//lstItemsInMultipleCrates.Add(Convert.ToInt32(crateCount.CrateNumber.OrderDetailPickedId));
}// 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();
ComboBox comIssues = new ComboBox { SelectedIndex = -1, };
comIssues.Items.Add("Correct");
comIssues.Items.Add("Damaged");
comIssues.Items.Add("Missing");
comIssues.Items.Add("Wrong Item");
comIssues.Items.Add("Out of Stock");
comIssues.Items.Add("Incorrect Amt");
//comIssues.SelectedIndex = 0;
comIssues.SelectedItem = "Correct";
comIssues.VerticalAlignment = VerticalAlignment.Center;
if (lstCrateCount.Count == 1)
{
txbProductName.Text = i.ProductName;
//_lstItemsInMultipleCrates = lstItemsInMultipleCrates;
//lstItemsInMultipleCrates.Clear();
}
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.";
}
grdItemDetails.Height = 50 * (lstCrateCount.Count * .66);
//? 35 * (lstCrateCount.Count * .66)
//: 35 * (lstCrateCount.Count * .5);
row.Height = new GridLength(grdItemDetails.Height, GridUnitType.Pixel);
}
if (Crate.ItemInMultipleCrates(i.OrderDetailPickedId))
{
txbProductName.Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
comIssues.IsEnabled = false;
txbQuantity.IsEnabled = false;
if (_lstItemsInMultipleCrates.Count > 0)
grdItemDetails.Height = 35 * (_lstItemsInMultipleCrates.Count * 1.32);
else
{
grdItemDetails.Height = 35 * 1.32;
}
row.Height = new GridLength(grdItemDetails.Height, GridUnitType.Pixel);
txbProductName.Text = i.ProductName + "\r\n" + "(Item is in multiple crates)";
chkChecked.IsChecked = true;
chkChecked.IsEnabled = false;
}
grdItemDetails.Children.Add(txbOriginalQty);
grdItemDetails.Children.Add(txbOrderDetailPickedId);
grdItemDetails.Children.Add(txbProductName);
grdItemDetails.Children.Add(txbQuantity);
grdItemDetails.Children.Add(txbUnits);
grdItemDetails.Children.Add(chkChecked);
grdItemDetails.Children.Add(comIssues);
Grid.SetColumn(txbProductName, 0);
Grid.SetColumn(txbQuantity, 1);
Grid.SetColumn(txbUnits, 2);
Grid.SetColumn(chkChecked, 3);
Grid.SetColumn(comIssues, 4);
Grid.SetRow(txbProductName, 0);
Grid.SetRow(txbQuantity, 0);
Grid.SetRow(txbUnits, 0);
Grid.SetRow(chkChecked, 0);
Grid.SetRow(comIssues, 0);
stpProducts.Children.Add(grdItemDetails);
}
}
I figured out how to solve this. Instead of programmatically defining the grid and control in C#, I defined them in the XAML instead and then changed their attributes in the C#
XAML
<ScrollViewer HorizontalAlignment="Left" Margin="114,212,0,0" VerticalAlignment="Top" Height="89" Width="844" RenderTransformOrigin="0.5,0.535" BorderThickness="1" BorderBrush="#FF1B933C">
<StackPanel x:Name="StpCollection" MinHeight="450" Width="840" HorizontalAlignment="Center" VerticalAlignment="Center"
Orientation="Vertical" Height="259" Margin="0,0,0,0">
<Grid x:Name="GridProducts">
<ComboBox x:Name="CmbCondition"></ComboBox>
</Grid>
</StackPanel>
</ScrollViewer>
C#
GridCollection = new Grid();
GridCollection.Height = 35;
GridCollection.Width = 840;
GridCollection.HorizontalAlignment = HorizontalAlignment.Left;
ColumnDefinition cdProduct = new ColumnDefinition();
cdProduct.Width = new GridLength(35, GridUnitType.Star);
ColumnDefinition cdUnits = new ColumnDefinition();
cdUnits.Width = new GridLength(10, GridUnitType.Star);
ColumnDefinition cdQty = new ColumnDefinition();
cdQty.Width = new GridLength(10, GridUnitType.Star);
ColumnDefinition cdCondition = new ColumnDefinition();
cdCondition.Width = new GridLength(10, GridUnitType.Star);
RowDefinition row = new RowDefinition();
row.Height = new GridLength(35, GridUnitType.Pixel);
GridCollection.ColumnDefinitions.Add(cdProduct);
GridCollection.ColumnDefinitions.Add(cdUnits);
GridCollection.ColumnDefinitions.Add(cdQty);
GridCollection.ColumnDefinitions.Add(cdCondition);
CmbCondition = new ComboBox();
CmbCondition.Width = 100;
CmbCondition.SelectedItem = null;
CmbCondition.Items.Add("None");
CmbCondition.Items.Add("Different Quantity");
CmbCondition.Items.Add("Short Date");
CmbCondition.Items.Add("Quality Rejection");
CmbCondition.SelectedIndex = 0;
CmbCondition.SelectedItem = "None";
GridCollection.Children.Add(txbOriginalQty);
GridCollection.Children.Add(txbCustomerCollectionDetailId);
GridCollection.Children.Add(txbProduct);
GridCollection.Children.Add(txbUnits);
GridCollection.Children.Add(txbQty);
GridCollection.Children.Add(CmbCondition);
Grid.SetColumn(txbProduct, 0);
Grid.SetColumn(txbUnits, 1);
Grid.SetColumn(txbQty, 2);
Grid.SetColumn(CmbCondition, 3);
Grid.SetRow(txbProduct, 0);
Grid.SetRow(txbUnits, 0);
Grid.SetRow(txbQty, 0);
Grid.SetRow(CmbCondition, 0);
StpCollection.Children.Add(GridCollection);
User contributions licensed under CC BY-SA 3.0