网格在C#后面的代码中的按钮内包含列

问题描述 投票:0回答:1

我正在尝试在后面的代码中在按钮内部创建一个网格(包含一个按钮和一些标签)。我已经用WPF做到了,它可以工作,但是当我尝试将其转换为后面的代码时,它将忽略列。我知道列的声明是正确的,因为我在按钮外尝试过该列,并且这些列可以正常工作。我不知道该怎么办。

WPF代码:

<Button HorizontalContentAlignment="Stretch" Click="OuterClick">
                    <Grid HorizontalAlignment="Stretch">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="20" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="2*" />
                            <ColumnDefinition Width="4*" />
                            <ColumnDefinition Width="4*" />
                        </Grid.ColumnDefinitions>
                        <Button Content="play" Grid.Column="0" Click="InnerClick"/>
                        <Label Content="name" Grid.Column="1"/>
                        <Label Content="artist" Grid.Column="2"/>
                    </Grid>
                </Button>

结果WPF:enter image description here

Grid waitingListItemPanel = new Grid() { HorizontalAlignment = HorizontalAlignment.Stretch };
                    Button waitingListItemBar = new Button() { HorizontalAlignment= HorizontalAlignment.Stretch, Content= waitingListItemPanel };
                    waitingListItemBar.Click += OuterClick;

                    Button playWaitingListItemButton = new Button() { Content = "Play"};
                    playWaitingListItemButton.Click += InnerClick;

                    waitingListItemPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20, GridUnitType.Star) });
                    waitingListItemPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20, GridUnitType.Star) });
                    waitingListItemPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20, GridUnitType.Star) });
                    waitingListItemPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20, GridUnitType.Star) });
                    waitingListItemPanel.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(20, GridUnitType.Star) });
                    waitingListItemPanel.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });

                    Label name = new Label() { Content = item.Name };
                    Label artist = new Label() { Content = item.Artist };
                    Label album = new Label() { Content = "Album" };
                    Label duration = new Label() { Content = item.Duration };

                    waitingListItemPanel.Children.Add(playWaitingListItemButton);
                    Grid.SetColumn(playWaitingListItemButton, 0);
                    waitingListItemPanel.Children.Add(name);
                    Grid.SetColumn(name, 1);
                    waitingListItemPanel.Children.Add(artist);
                    Grid.SetColumn(artist, 2);
                    waitingListItemPanel.Children.Add(album);
                    Grid.SetColumn(album, 3);
                    waitingListItemPanel.Children.Add(duration);
                    Grid.SetColumn(duration, 4);


                    NextUpStackPanel.Children.Add(waitingListItemBar);

后面的结果代码:enter image description here

c# wpf xaml grid
1个回答
0
投票

嗯,在xaml代码中,您具有不同的网格列定义

<Grid.ColumnDefinitions>
   <ColumnDefinition Width="2*" />
   <ColumnDefinition Width="4*" />
   <ColumnDefinition Width="4*" />
</Grid.ColumnDefinitions>

在后面的代码中,为所有列{ Width = new GridLength(20, GridUnitType.Star) }设置了相同的宽度,它等于xaml中的20*。此外,行高和列号也不同]

© www.soinside.com 2019 - 2024. All rights reserved.