为每个项目创建Listbox.ItemTemplate XAML C#

时间:2015-10-11 18:12:15

标签: c# wpf xaml listbox

我有问题。我有listbox.ItemTemplate里面的Grid。

<ListBox x:Name="listBox" Foreground="Black" FontSize="23" Height="470">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid Margin="0,0,0,40" Height="80">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="60"/>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="Auto"/>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock x:Name="stopName_TextBlock" Grid.Column="1" Text="{Binding Title}" Foreground="Black" FontSize="23"/>
                                    <TextBlock x:Name="time_TextBlock" Grid.Column="2" Text="{Binding Time}" Foreground="Black" FontSize="23"/>
                                        <Grid x:Name="firstGraphic" Visibility="Collapsed" Grid.Column="0">
                                            <Rectangle Grid.Row="1" Height="40" Fill="#2575B0" Width="10" VerticalAlignment="Bottom"/>
                                            <Ellipse Grid.Row="1" Fill="#2575B0"  Height="20" Width="20"/>
                                        </Grid>

                                        <Grid x:Name="midleGraphic" Visibility="Collapsed" Grid.Column="0">
                                            <Rectangle Height="80" Width="10" Fill="#2575B0"/>
                                            <Rectangle Height="10" Width="30"  Fill="#2575B0" HorizontalAlignment="Right" RadiusX="5" RadiusY="5"/>
                                        </Grid>

                                        <Grid x:Name="lastGraphic" Visibility="Collapsed" Grid.Column="0">
                                            <Rectangle Grid.Row="2" Height="40" Fill="#2575B0" Width="10" VerticalAlignment="Top"/>
                                            <Ellipse Grid.Row="2" Height="20" Width="20" Fill="#2575B0"/>
                                        </Grid>


                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

我的列表框将包含20-25个项目。第一项将有firstGrahic Grid。最后一项 - lastGraphic Grid。和其他人 - midleGraphic Grid。我创建了所有这些网格,但不知道如何在C#代码中找到这个网格。我想为他们改变Visability属性。

for (int i = 0; i < mainList.Count; i++)
            {
                listBox.Items.Add(mainList[i]);
                if (i == 0)
                {
                    Grid grid = (Grid)this.listBox.FindName("firstGraphic");
                    grid.Visibility = System.Windows.Visibility.Visible;
                }
            }

此示例包含第一个Item,但对象grid = null。 请帮帮我。

1 个答案:

答案 0 :(得分:1)

我可以看到你的模型包含绑定到TextBlocks的属性Title和Time。您还可以向模型添加新的属性,例如:

public Visibility FirstGraphicVisibility { get; set; }

并将其绑定到网格Visibility,例如:

<Grid x:Name="firstGraphic" Visibility="{Binding FirstGraphicVisibility}" Grid.Column="0">

接下来只需更改源列表mainList中的FirstGraphicVisibility属性并设置ItemsSource的{​​{1}}:

ListBox