none
userControl类型的控件插入指定list item问题? RRS feed

  • 问题

  • 我想获得一个list 的第三个item的句柄要如何实现,想把C#生成的userControl类型的控件插入第三个item中,作为它的子控件显示。 list通过数据绑定和item模板创建。
    具体功能需求如下:
    进入页面后,开始下载跟贴列表数据,数据加载结束后,通过递归迭代生成跟“贴盖楼控件”FloorControl 。根据数据,将FloorControl 插入指定的list item项。其中楼高和被插入的item均为不定,由数据源决定动态生成。
    list 实现方式如下
    绑定数据源:list
    <ListBox x:Name="CHot" ItemsSource="{Binding}" ItemTemplate="{StaticResource CommentListTemplate}"/>
    item模板:每一个item
    <DataTemplate x:Key="CommentListTemplate">
    <!--<Border HorizontalAlignment="Stretch" MinWidth="455" Margin="0,8,0,8" BorderThickness="1" BorderBrush="#FFDEE2CB" CornerRadius="10">-->
    <HyperlinkButton NavigateUri="{Binding ID, Converter={StaticResource converterIdToUri}}" HorizontalAlignment="Stretch" Padding="2" Click="browserMore" >
    <toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu>
    <!-- You can suppress tilt on indivudal menu items with TiltEffect.SuppressTilt="True" -->
    <toolkit:MenuItem Header="分享" Click="MenuItem_share" CommandParameter="{Binding ID}"/>
    <toolkit:MenuItem Header="顶" Click="MenuItem_up" CommandParameter="{Binding ID}"/>
    <toolkit:MenuItem Header="回复" Click="MenuItem_reply" CommandParameter="{Binding ID}"/>
    </toolkit:ContextMenu>
    </toolkit:ContextMenuService.ContextMenu>
    <HyperlinkButton.Template>
    <ControlTemplate>
    <Grid x:Name="CommentPanel" Margin="4,4,4,4">
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="1"/>
    <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
    </Grid.RowDefinitions> <!--Margin="0,80,0,0"-->
    <Line X1="0" Y1="2" X2="480" Y2="2" Stroke="Red" StrokeThickness="3"></Line>
    <TextBlock x:Name="CommentTitle1" Grid.Column="1" Grid.Row="0" Text="{Binding From}" VerticalAlignment="Top" TextWrapping="Wrap" Foreground="{StaticResource MainForeColor}" Style="{StaticResource CommentTitle}" />
    <Border Grid.Row="1" x:Name="floorBorder" Grid.Column="2" Background="#FFFFEE" VerticalAlignment="Stretch" MaxWidth="434" Margin="0,2,0,2" BorderThickness="1" BorderBrush="#BBBBBB" CornerRadius="5">
    <ListBox x:Name="floorList" ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding CommentArray}" ItemTemplate="{StaticResource commentTemplate}"/>
    </Border>
    <TextBlock Grid.Column="3" Grid.Row="2" Text="{Binding Body}" TextWrapping="Wrap" Foreground="{StaticResource SummaryColor}" Style="{StaticResource CommentBody}" />
    </Grid>
    </ControlTemplate>
    </HyperlinkButton.Template>
    </HyperlinkButton>
    <!--</Border>-->
    </DataTemplate>
    • 已移动 Jiong ShiMVP 2011年12月22日 7:33 (发件人:Windows Phone 用户)
    2011年12月22日 2:24

答案

  • "我想获得一个list 的第三个item的句柄要如何实现"

    你好,可以使用 list.Items[2] 直接获取第三个item的内容.

    而如果你要获取控件的话,你可以使用UI遍历,来获取你要的控件.


    2011年12月26日 3:29

全部回复

  • "我想获得一个list 的第三个item的句柄要如何实现"

    你好,可以使用 list.Items[2] 直接获取第三个item的内容.

    而如果你要获取控件的话,你可以使用UI遍历,来获取你要的控件.


    2011年12月26日 3:29
  •  list.Items[2]是ItemCollection的类型,那我如果将一个userControl控件插入到这个item里呢?非常感谢
    2011年12月29日 2:54
  • "list.Items[2]是ItemCollection的类型"

     我使用了代码:

                <ListBox Height="320" HorizontalAlignment="Left" Margin="10,10,0,0" Name="listBox1" VerticalAlignment="Top" Width="460" >
                    <ListBoxItem Content="A"/>
                    <ListBoxItem Content="B"/>
                    <ListBoxItem Content="C"/>
                </ListBox>

    (listBox1.Items[2] as ListBoxItem).Content 来获取到了值"C"

    我建议你创建一个按钮,设置一个断点,当到达断点的时候,Ctrl+Shift+I打开Immediate Window.

    打入(listBox1.Items[2] as ListBoxItem).Content 回车,查看你的Content是什么类型的

    然后再打入 ((listBox1.Items[2] as ListBoxItem).Content as 这个类型) 一步一步获取你要的数据

     

     

    2011年12月29日 3:11
  • "那我如果将一个userControl控件插入到这个item里呢?"

    将UserControl放入DataTemplate即可,UserControl于其他的控件(TextBox等)没有区别

    2011年12月29日 3:12