So I have written Xaml code to make a datagrid with a grid above it, to have a multi-header. Now, I want to dynamically generate the grid, but I've used bindings in the Width
propperty of the ColumnDefenition
... And I have no clue on how to convert this to C#
This is what I have in 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>
Now, That works as it should, but in my C# I have this;
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 =
}
The pos.Width =
is not filled in further, since I totally don't have an idea on how to add the {Binding ElementName=pos, Path=ActualWidth, Mode=OneWay}
from the Xaml... Any ideas? Or solutions to this?
The programmatic equivalent of this XAML:
<ColumnDefinition Width="{Binding ElementName=pos, Path=ActualWidth, Mode=OneWay}"/>
...would be this:
ColumnDefinition cd = new ColumnDefinition();
BindingOperations.SetBinding(cd, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pos, Mode = BindingMode.OneWay });
Looking through the MSDN code, you should be able to find an example of howto create binding in code, https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-create-a-binding-in-code An example would be like this
// 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);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.