c# - wpf xaml 到 c# 不一样
问题描述
II 将 xaml 代码转换为 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# 时,它看起来并不是那样的......
我正在使用的 C# 代码如下:
private void LayoutTotal(string klasse)
{
// Add the class name to the document
TextBlock txt_selected_class = new TextBlock()
{
Text = klasse + " (" + inp_tour_part.SelectedItem.ToString() + ")"
};
print_content.Children.Add(txt_selected_class);
// Initiate the new grid
Grid grid = new Grid();
// make all the column defenitions
ColumnDefinition pos = new ColumnDefinition();
BindingOperations.SetBinding(pos, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pos, Mode = BindingMode.OneWay });
ColumnDefinition nr = new ColumnDefinition();
BindingOperations.SetBinding(nr, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = nr, Mode = BindingMode.OneWay });
ColumnDefinition pilot = new ColumnDefinition();
BindingOperations.SetBinding(pilot, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pilot, Mode = BindingMode.OneWay });
ColumnDefinition pilot_club = new ColumnDefinition();
BindingOperations.SetBinding(pilot_club, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pilot_club, Mode = BindingMode.OneWay });
ColumnDefinition pilot_license = new ColumnDefinition();
BindingOperations.SetBinding(pilot_license, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = pilot_license, Mode = BindingMode.OneWay });
ColumnDefinition navigator = new ColumnDefinition();
BindingOperations.SetBinding(navigator, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = navigator, Mode = BindingMode.OneWay });
ColumnDefinition navigator_club = new ColumnDefinition();
BindingOperations.SetBinding(navigator_club, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = navigator_club, Mode = BindingMode.OneWay });
ColumnDefinition navigator_license = new ColumnDefinition();
BindingOperations.SetBinding(navigator_license, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = navigator_license, Mode = BindingMode.OneWay });
ColumnDefinition part_1_points = new ColumnDefinition();
BindingOperations.SetBinding(part_1_points, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = part_1_points, Mode = BindingMode.OneWay });
ColumnDefinition part_1_distance = new ColumnDefinition();
BindingOperations.SetBinding(part_1_distance, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = part_1_distance, Mode = BindingMode.OneWay });
ColumnDefinition part_2_tot_gtks = new ColumnDefinition();
BindingOperations.SetBinding(part_2_tot_gtks, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = part_2_tot_gtks, Mode = BindingMode.OneWay });
ColumnDefinition part_2_tot_time = new ColumnDefinition();
BindingOperations.SetBinding(part_2_tot_time, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = part_2_tot_time, Mode = BindingMode.OneWay });
ColumnDefinition part_2_tot_controls = new ColumnDefinition();
BindingOperations.SetBinding(part_2_tot_controls, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = part_2_tot_controls, Mode = BindingMode.OneWay });
ColumnDefinition part_2_distance = new ColumnDefinition();
BindingOperations.SetBinding(part_2_distance, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = part_2_distance, Mode = BindingMode.OneWay });
ColumnDefinition total_gtk = new ColumnDefinition();
BindingOperations.SetBinding(total_gtk, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = total_gtk, Mode = BindingMode.OneWay });
ColumnDefinition total_distance = new ColumnDefinition();
BindingOperations.SetBinding(total_distance, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = total_distance, Mode = BindingMode.OneWay });
ColumnDefinition total = new ColumnDefinition();
BindingOperations.SetBinding(total, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = total, Mode = BindingMode.OneWay });
// add all the column defenitions to the grid
grid.ColumnDefinitions.Add(pos);
grid.ColumnDefinitions.Add(nr);
grid.ColumnDefinitions.Add(pilot);
grid.ColumnDefinitions.Add(pilot_club);
grid.ColumnDefinitions.Add(pilot_license);
grid.ColumnDefinitions.Add(navigator);
grid.ColumnDefinitions.Add(navigator_club);
grid.ColumnDefinitions.Add(navigator_license);
grid.ColumnDefinitions.Add(part_1_points);
grid.ColumnDefinitions.Add(part_1_distance);
grid.ColumnDefinitions.Add(part_2_tot_gtks);
grid.ColumnDefinitions.Add(part_2_tot_time);
grid.ColumnDefinitions.Add(part_2_tot_controls);
grid.ColumnDefinitions.Add(part_2_distance);
grid.ColumnDefinitions.Add(total_gtk);
grid.ColumnDefinitions.Add(total_distance);
grid.ColumnDefinitions.Add(total);
// Add the grid to the layout
print_content.Children.Add(grid);
// Add the 3 upper headers (labels)
Label partone = new Label()
{
Content = "Deel 1",
Style = (Style)(Application.Current.Resources["DGHeaderStyle"])
};
partone.SetValue(Grid.ColumnSpanProperty, 5);
partone.SetValue(Grid.ColumnProperty, 8);
Label parttwo = new Label()
{
Content = "Deel 2",
Style = (Style)(Application.Current.Resources["DGHeaderStyle"])
};
parttwo.SetValue(Grid.ColumnSpanProperty, 5);
parttwo.SetValue(Grid.ColumnProperty, 12);
Label total_result = new Label()
{
Content = "Eind",
Style = (Style)(Application.Current.Resources["DGHeaderStyle"])
};
total_result.SetValue(Grid.ColumnSpanProperty, 5);
total_result.SetValue(Grid.ColumnProperty, 12);
// Add the labels
print_content.Children.Add(partone);
print_content.Children.Add(parttwo);
print_content.Children.Add(total_result);
//Generate the DataGrid
DataGrid list_results = new DataGrid()
{
IsReadOnly = true,
ColumnHeaderStyle = (Style)(Application.Current.Resources["HeaderStyle"]),
ColumnWidth = DataGridLength.Auto,
RowBackground = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)), // Transparent color
Foreground = new SolidColorBrush(Color.FromRgb(250, 250, 250)),
AlternatingRowBackground = new SolidColorBrush(Color.FromRgb(85, 90, 98)),
Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)),
BorderThickness = new Thickness(0),
AutoGenerateColumns = false,
RowHeaderWidth = 0
};
// Set the result list to grid row 1
list_results.SetValue(Grid.RowProperty, 1);
// Generate the headers
DataGridTextColumn h_pos = new DataGridTextColumn()
{
Header = "Pos"
};
DataGridTextColumn h_nr = new DataGridTextColumn()
{
Header = "Nr"
};
DataGridTextColumn h_pilot = new DataGridTextColumn()
{
Header = "Naam piloot"
};
DataGridTextColumn h_pilot_club = new DataGridTextColumn()
{
Header = "Club"
};
DataGridTextColumn h_pilot_license = new DataGridTextColumn()
{
Header = "Licentie"
};
DataGridTextColumn h_navigator = new DataGridTextColumn()
{
Header = "Naam copiloot"
};
DataGridTextColumn h_navigator_club = new DataGridTextColumn()
{
Header = "Club"
};
DataGridTextColumn h_navigator_license = new DataGridTextColumn()
{
Header = "Licentie"
};
DataGridTextColumn h_part_1_points = new DataGridTextColumn()
{
Header = "Deel 1",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_part_1_distance = new DataGridTextColumn()
{
Header = "Afstand",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_part_2_tot_gtks = new DataGridTextColumn()
{
Header = "Totaal GTK's",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_part_2_tot_time = new DataGridTextColumn()
{
Header = "Totaal tijdscontroles",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_part_2_controls = new DataGridTextColumn()
{
Header = "Totaal controles",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_part_2_distance = new DataGridTextColumn()
{
Header = "Totaal controles",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_total_gtk = new DataGridTextColumn()
{
Header = "Totaal GTK",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_total_distance = new DataGridTextColumn()
{
Header = "Totaal afstand",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
DataGridTextColumn h_total_total = new DataGridTextColumn()
{
Header = "Totaal controles",
HeaderStyle = (Style)(Application.Current.Resources["ColumnHeaderRotateStyle"])
};
// Add the headers
list_results.Columns.Add(h_pos);
list_results.Columns.Add(h_nr);
list_results.Columns.Add(h_pilot);
list_results.Columns.Add(h_pilot_club);
list_results.Columns.Add(h_pilot_license);
list_results.Columns.Add(h_navigator);
list_results.Columns.Add(h_navigator_club);
list_results.Columns.Add(h_navigator_license);
list_results.Columns.Add(h_part_1_points);
list_results.Columns.Add(h_part_1_distance);
list_results.Columns.Add(h_part_2_tot_gtks);
list_results.Columns.Add(h_part_2_tot_time);
list_results.Columns.Add(h_part_2_controls);
list_results.Columns.Add(h_part_2_distance);
list_results.Columns.Add(h_total_gtk);
list_results.Columns.Add(h_total_distance);
list_results.Columns.Add(h_total_total);
// Add the grid to the lay-out
print_content.Children.Add(list_results);
}
我不知道我在这里做错了什么,或者这是否包含足够的信息......
它可能真的很小,但我不知道出了什么问题。
解决方案
问题 1:您将标签 partone、parttwo 和 total_result 添加到 StackPanel 而不是应该在的 Grid 中。
问题 2:您将 ColumnDefinitions 的宽度绑定到它们自己,而不是像您想要的那样绑定到 DataGridHeaders(例如 new Binding("ActualWidth") { Source = h_pos , Mode = BindingMode.OneWay })。
尝试:
// Add the class name to the document
TextBlock txt_selected_class = new TextBlock()
{
Text = $"{klasse} ({inp_tour_part.SelectedItem.ToString()})"
};
print_content.Children.Add(txt_selected_class);
// Generate the headers
DataGridTextColumn h_pos = new DataGridTextColumn()
{
Header = "Pos"
};
...
// Initiate the new grid
Grid grid = new Grid();
// make all the column defenitions
ColumnDefinition pos = new ColumnDefinition();
BindingOperations.SetBinding(pos, ColumnDefinition.WidthProperty, new Binding("ActualWidth") { Source = h_pos, Mode = BindingMode.OneWay });
...
// Add the 3 upper headers (labels)
Label partone = new Label()
{
Content = "Deel 1",
Style = (Style)(Application.Current.Resources["DGHeaderStyle"])
};
partone.SetValue(Grid.ColumnSpanProperty, 5);
partone.SetValue(Grid.ColumnProperty, 8);
...
// Add the labels
grid.Children.Add(partone);
grid.Children.Add(parttwo);
grid.Children.Add(total_result);
// Add the grid to the layout
print_content.Children.Add(grid);
//Generate the DataGrid
...
推荐阅读
- python - 如何使用 python 脚本在 Abaqus 中编辑/导入节点坐标(网格)?
- c - 如何使用C程序查找可移动设备的序列号
- python - 如何从键中获取字典
- r - 使用 ggstatsplot 在离散变量和数值变量之间转换时出错
- angular - 在angular6中自动完成
- python - Swagger Python Flask 服务器在 HTTPS 上运行缓慢
- html - 我在 html 中的 iframe 没有显示内容。你能告诉我我的代码有什么问题吗?
- python - 分配容器中的物品 - 3D 装箱问题 | Python
- c# - 如何有效地检索具有与属性名称相似的命名字符串的特定类属性值
- python - 无法使用线性回归预测值。'float() 参数必须是字符串或数字,而不是 'datetime.datetime''