I am creating a Grid in code and returning the generated markup to be used as the Content of a ContentPresenter. My problem is that I have clear guidelines as to the proportions of the Grid rows. Basically, out of 7 rows, I need the 1st, 2nd, and 7th rows to all be of a set percentage of the total and stay that way during all resizing of the main window. The 4th 5th, and 6th rows need to be a set percentage of the total height but set to a different value than rows 1, 2, and 7. The 3rd row, in which a DataGrid is placed, needs to be 40% of the Grid Height or height of the DataGrid's rows, whichever is less.
I see no documentation on how to do this in code, only in XAML. Any help would be greatly appreciated.
public override UIElement GetMarkup { get { // var oasisContentControl = new Grid() { Name = "OasisOrders", VerticalAlignment = VerticalAlignment.Stretch, HorizontalAlignment = HorizontalAlignment.Stretch}; // var colDef1 = new ColumnDefinition(); var colDef2 = new ColumnDefinition(); var colDef3 = new ColumnDefinition(); oasisContentControl.ColumnDefinitions.Add(colDef1); oasisContentControl.ColumnDefinitions.Add(colDef2); oasisContentControl.ColumnDefinitions.Add(colDef3); // var rowDef1 = new RowDefinition() { Height = GridLength.Auto }; ; var rowDef2 = new RowDefinition(); var rowDef3 = new RowDefinition(); var rowDef4 = new RowDefinition(); var rowDef5 = new RowDefinition(); var rowDef6 = new RowDefinition(); var rowDef7 = new RowDefinition(); oasisContentControl.RowDefinitions.Add(rowDef1); oasisContentControl.RowDefinitions.Add(rowDef2); oasisContentControl.RowDefinitions.Add(rowDef3); oasisContentControl.RowDefinitions.Add(rowDef4); oasisContentControl.RowDefinitions.Add(rowDef5); oasisContentControl.RowDefinitions.Add(rowDef6); oasisContentControl.RowDefinitions.Add(rowDef7); // var border1 = new Border() { Background = Brushes.Moccasin, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; border1.SetValue(Grid.RowProperty, 0); border1.SetValue(Grid.ColumnProperty, 0); var txt1 = new TextBlock() { Text = "Oasis Order Pick List", FontSize = 36, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Stretch }; border1.Child = txt1; oasisContentControl.Children.Add(border1); // var border2 = new Border() { Background = Brushes.Moccasin, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; border2.SetValue(Grid.RowProperty, 0); border2.SetValue(Grid.ColumnProperty, 1); var lbl1 = new Label() { Name = "CurrentDateLabel", FontSize = 18, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center }; // Set the current date on the Oasis screen. var dateString = DateTime.Today.GetDateTimeFormats(); lbl1.Content = dateString[7]; border2.Child = lbl1; oasisContentControl.Children.Add(border2); // var border3 = new Border() { Background = Brushes.Moccasin, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; border3.SetValue(Grid.RowProperty, 0); border3.SetValue(Grid.ColumnProperty, 2); var logoControl = new UcLogoControl(); border3.Child = logoControl; oasisContentControl.Children.Add(border3); // var border4 = new Border() { Background = Brushes.Moccasin, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; border4.SetValue(Grid.RowProperty, 1); border4.SetValue(Grid.ColumnProperty, 0); border4.SetValue(Grid.ColumnSpanProperty, 3); var dockPanel1 = new DockPanel(); var lbl2 = new Label() { Name = "ChooseDeptLabel", Content = "Choose Dept. / Pack Line:" }; DockPanel.SetDock(lbl2, Dock.Top); dockPanel1.Children.Add(lbl2); var comboBox1 = new ComboBox() { Height = 20, Width = 50, HorizontalAlignment = HorizontalAlignment.Left }; DockPanel.SetDock(comboBox1, Dock.Bottom); var pickLists = GetPickLists(PackLine); foreach (var findPickListsForPackLine in pickLists) { int index = comboBox1.Items.Add(findPickListsForPackLine.PickList); } //comboBox1.DisplayMemberPath = "PickList"; // TODO: Get this working correctly. See: http://social.msdn.microsoft.com/Forums/vstudio/en-US/0575234b-0e7c-4e5b-8a13-13ce82667971/how-do-i-bind-an-observablecollection-to-a-combobox-in-code //ObservableCollection<FindPickListsForPackLine> pickLists1 = GetPickLists(PackLine); //var binding1 = new Binding { Source = pickLists1 }; //comboBox1.SetBinding(ItemsControl.ItemsSourceProperty, binding1); //comboBox1.DisplayMemberPath = "PickList"; if (comboBox1.Items.Count == 1) comboBox1.SelectedItem = comboBox1.Items[0]; dockPanel1.Children.Add(comboBox1); border4.Child = dockPanel1; oasisContentControl.Children.Add(border4); // //var stack = new StackPanel(); var scroller = new ScrollViewer() { HorizontalScrollBarVisibility = ScrollBarVisibility.Auto, VerticalScrollBarVisibility = ScrollBarVisibility.Auto, CanContentScroll = true }; var dgOrderData = new DataGrid { Name = "OasisOrdersData", HorizontalScrollBarVisibility = ScrollBarVisibility.Auto, VerticalScrollBarVisibility = ScrollBarVisibility.Auto, IsReadOnly = true, CanUserReorderColumns = false }; dgOrderData.SetValue(Grid.RowProperty, 2); dgOrderData.SetValue(Grid.ColumnProperty, 0); dgOrderData.SetValue(Grid.ColumnSpanProperty, 3); dgOrderData.ItemsSource = GetPlannedOrders((string)comboBox1.SelectedItem); //dgOrderData.Columns[1].Visibility = Visibility.Hidden; //stack.Children.Add(dgOrderData); //scroller.Content = stack; scroller.Content = dgOrderData; scroller.SetValue(Grid.RowProperty, 2); scroller.SetValue(Grid.ColumnProperty, 0); scroller.SetValue(Grid.ColumnSpanProperty, 3); oasisContentControl.Children.Add(scroller); // var border5 = new Border() { Background = Brushes.Moccasin, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; border5.SetValue(Grid.RowProperty, 3); border5.SetValue(Grid.ColumnProperty, 0); border5.SetValue(Grid.ColumnSpanProperty, 3); var txt2 = new TextBlock() { Text = "Selected Order Information", FontSize = 18, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Stretch }; border5.Child = txt2; oasisContentControl.Children.Add(border5); // var border6 = new Border() { Background = Brushes.Moccasin, BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; border6.SetValue(Grid.RowProperty, 4); border6.SetValue(Grid.ColumnProperty, 0); var dockPanel2 = new DockPanel(); var txt3 = new TextBlock() { Text = "Packing Order Information", FontSize = 14, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Stretch }; DockPanel.SetDock(txt3, Dock.Top); dockPanel2.Children.Add(txt3); var orderInfoGrid = new Grid() { Name = "OrderInfoGrid" }; var colDef11 = new ColumnDefinition() { Width = GridLength.Auto }; var colDef12 = new ColumnDefinition() { Width = GridLength.Auto }; orderInfoGrid.ColumnDefinitions.Add(colDef11); orderInfoGrid.ColumnDefinitions.Add(colDef12); var rowDef11 = new RowDefinition() { Height = GridLength.Auto }; var rowDef12 = new RowDefinition() { Height = GridLength.Auto }; var rowDef13 = new RowDefinition() { Height = GridLength.Auto }; var rowDef14 = new RowDefinition() { Height = GridLength.Auto }; orderInfoGrid.RowDefinitions.Add(rowDef11); orderInfoGrid.RowDefinitions.Add(rowDef12); orderInfoGrid.RowDefinitions.Add(rowDef13); orderInfoGrid.RowDefinitions.Add(rowDef14); var dockPanel3 = new DockPanel(); dockPanel3.SetValue(Grid.RowProperty, 0); dockPanel3.SetValue(Grid.ColumnProperty, 0); var lbl3 = new Label() { Name = "CustomerLabel", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Left, Content = "Customer: " }; dockPanel3.Children.Add(lbl3); orderInfoGrid.Children.Add(dockPanel3); border6.Child = dockPanel2; oasisContentControl.Children.Add(border6); // var processButton = new Button() { Name = "ProcessPackLine", FontSize = 18, Content = "Run Pack Line", ClickMode = ClickMode.Press }; processButton.SetValue(Grid.RowProperty, 6); processButton.SetValue(Grid.ColumnProperty, 2); oasisContentControl.Children.Add(processButton); return oasisContentControl; } }