Wpf xaml для C# - это не то же самое

Я преобразовал код 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>

Этот код дает мне следующий результат:

Wpf xaml для C# - это не то же самое

Теперь, когда я преобразовал этот код в C#, это действительно не так ...

Wpf xaml для 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);
}

Я не знаю точно, что я здесь делаю не так, и достаточно ли информации ...

Это может быть что-то очень маленькое, но я не могу понять, что не так.

converted xaml code to C# code because I need to generate the lay-out dynamically, если вам просто нужно динамически сгенерировать макет, это может вам помочь: stackoverflow.com/a/9007442/366064
Bizhan 11.08.2018 13:43

Кстати: подумайте об использовании строковой интерполяции для вашего текстового блока: Text = $ "{klasse} ({inp_tour_part.SelectedItem.ToString ()})"

Evertude 11.08.2018 14:40

Здесь нет ничего плохого; вам просто нужно сначала переосмыслить код макета, если вы идете по этому пути. В XAML вы визуализируете внешний вид макета по отношению к внутреннему содержимому, но я понял, что с помощью кода вы должны визуализировать его внутреннее содержимое во внешнем.

Michael Puckett II 11.08.2018 15:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема 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
        ...

Если я это сделаю, мои ярлыки исчезнут

Robin 11.08.2018 13:52

да, нашел другую проблему

Evertude 11.08.2018 14:07

Связывание ширины столбца теперь указывает на заголовки DataGridTextColumn, такие как h_pos вместо pos

Evertude 11.08.2018 14:30

Ну ладно, видел, единственное, что сейчас я не вижу лейбла parttwoi.imgur.com/f7YyL6Z.png

Robin 11.08.2018 14:47

Потому что они накладываются друг на друга. Установите свойство столбца Eind на 16

Evertude 11.08.2018 14:48

Другие вопросы по теме