Итак, я написал код Xaml, чтобы создать сетку данных с сеткой над ней, чтобы иметь несколько заголовков. Теперь я хочу динамически сгенерировать сетку, но я использовал привязки в свойствах WidthColumnDefenition ... И я понятия не имею, как преобразовать это в C#
Это то, что у меня есть в Xaml:
<StackPanel Grid.Row = "2" Margin = "0,30" x:Name = "print_content">
<TextBlock x:Name = "txt_selected_class" Text = "KLASSE HIER" />
<!--Here will the result come-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "{Binding ElementName=pos, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=Nr, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=pilot, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=pilot_club, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=pilot_license, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=navigator, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=navigator_club, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=navigator_license, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_1_tot_gtk, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_1_tot_timecontrol, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_1_tot_control, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_1_distance, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_2_tot_gtk, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_2_tot_timecontrol, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_2_tot_control, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=part_2_distance, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=end_tot_gtk, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=end_tot_dist, Path=ActualWidth, Mode=OneWay}"/>
<ColumnDefinition Width = "{Binding ElementName=end_tot_points, Path=ActualWidth, Mode=OneWay}"/>
</Grid.ColumnDefinitions>
<Label Grid.ColumnSpan = "5" Grid.Column = "8" Content = "Deel 1" Style = "{StaticResource DGHeaderStyle}" />
<Label Grid.ColumnSpan = "5" Grid.Column = "12" Content = "Deel 2" Style = "{StaticResource DGHeaderStyle}" BorderThickness = "1,0,0,0" BorderBrush = "AliceBlue" />
<Label Grid.ColumnSpan = "3" Grid.Column = "16" Content = "Eind" Style = "{StaticResource DGHeaderStyle}" BorderThickness = "1,0,0,0" BorderBrush = "AliceBlue" />
</Grid>
<DataGrid x:Name = "list_results" IsReadOnly = "True" Grid.Row = "1" ColumnHeaderStyle = "{StaticResource HeaderStyle}" ColumnWidth = "Auto" RowBackground = "Transparent" Foreground = "#fafafa" AlternatingRowBackground = "#555a62" Background = "Transparent" BorderThickness = "0" AutoGenerateColumns = "False" RowHeaderWidth = "0" ScrollViewer.CanContentScroll = "True" ScrollViewer.VerticalScrollBarVisibility = "Auto">
<DataGrid.Columns>
<DataGridTextColumn x:Name = "pos" Header = "Pos" />
<DataGridTextColumn x:Name = "Nr" Header = "Nr" Binding = "{Binding team_number}" />
<DataGridTextColumn x:Name = "pilot" Header = "Naam piloot" Binding = "{Binding team_data.pilot.firstname}" />
<DataGridTextColumn x:Name = "pilot_club" Header = "Club" Binding = "{Binding team_data.pilot.club}" />
<DataGridTextColumn x:Name = "pilot_license" Header = "Licentie" Binding = "{Binding team_data.pilot.license}" />
<DataGridTextColumn x:Name = "navigator" Header = "Naam copiloot" Binding = "{Binding team_data.navigator.firstname}" />
<DataGridTextColumn x:Name = "navigator_club" Header = "Club" Binding = "{Binding team_data.navigator.club}" />
<DataGridTextColumn x:Name = "navigator_license" Header = "Licentie" Binding = "{Binding team_data.navigator.license}" />
<DataGridTextColumn x:Name = "part_1_tot_gtk" Header = "Totaal GTK's" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_1_tot_timecontrol" Header = "Totaal tijdscontroles" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_1_tot_control" Header = "Totaal controles" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_1_distance" Header = "Afstand" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_2_tot_gtk" Header = "Totaal GTK's" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_2_tot_timecontrol" Header = "Totaal tijdscontroles" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_2_tot_control" Header = "Totaal controles" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "part_2_distance" Header = "Afstand" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "end_tot_gtk" Header = "Totaal GTK" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "end_tot_dist" Header = "Totaal Afstand" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
<DataGridTextColumn x:Name = "end_tot_points" Header = "Totaal" Binding = "{Binding team_data.navigator.license}" HeaderStyle = "{StaticResource ColumnHeaderRotateStyle}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
Теперь это работает так, как должно, но в моем C# у меня есть следующее;
private void LayoutPartOne(string klasse)
{
// Add the class name to the document
TextBlock txt_selected_class = new TextBlock()
{
Text = klasse + "(" + inp_tour_part.Text + ")"
};
// Initiate the new grid
Grid grid = new Grid();
// Add al the column defenitions
ColumnDefinition pos = new ColumnDefinition();
pos.Width =
}
pos.Width = дальше не заполняется, так как я совершенно не знаю, как добавить {Binding ElementName=pos, Path=ActualWidth, Mode=OneWay} из Xaml ... Есть идеи? Или решения для этого?





Просматривая код MSDN, вы сможете найти пример того, как создать привязку в коде, https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-create-a-binding-in-code Пример будет таким
// Make a new source.
MyData myDataObject = new MyData(DateTime.Now);
Binding myBinding = new Binding("MyDataProperty");
myBinding.Source = myDataObject;
// Bind the new data source to the myText TextBlock control's Text dependency property.
myText.SetBinding(TextBlock.TextProperty, myBinding);
Программный эквивалент этого XAML:
<ColumnDefinition Width = "{Binding ElementName=pos, Path=ActualWidth, Mode=OneWay}"/>
... было бы так:
ColumnDefinition cd = new ColumnDefinition();
BindingOperations.SetBinding(cd, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pos, Mode = BindingMode.OneWay });
Я видел это, но как я могу добиться того же результата, что и в моем текущем коде xaml? Я понятия не имею, как