如何在Silverlight中将焦点设置为嵌套列表框的第一项?

时间:2010-03-25 11:21:26

标签: c# silverlight silverlight-3.0 listbox

我有一个列表框,其中包含另一个lisbox。

<ListBox x:Name="listBoxParent">
    <ListBox.ItemTemplate>

      <DataTemplate>


        <Image x:Name="thumbNailImagePath" Source="/this.jpg"  Style="{StaticResource ThumbNailPreview}" />                              
           <TextBlock Margin="5" Text="{Binding Smthing}" Style="{StaticResource TitleBlock_Artist}" />
           </StackPanel>
           <StackPanel Style="{StaticResource someStyle}" >
             <ListBox x:Name="listBoxChild" Loaded="listBoxChild_Loaded" BorderThickness="0">
               <ListBox.ItemTemplate>
                 <DataTemplate>
                   <StackPanel>
                     <TextBlock Margin="5" Text="{Binding myText}" Width="300"/>
                   </StackPanel>
                 </DataTemplate>
               </ListBox.ItemTemplate>
             </ListBox>
           </StackPanel>
         </DataTemplate>
        </ListBox.ItemTemplate>

      <ListBox.ItemsPanel>

      </ListBox.ItemsPanel>

</ListBox>

现在,当我尝试将焦点集中到子列表框的第一项时,它会在第一个所有父项列表框的第1项上重新集中(因为它在父列表框中重复),希望我能提供一个屏幕截图以便更好地理解。但不能

 public void listBoxChild_Loaded(object sender, RoutedEventArgs e)
        {
           var myListBox = (ListBox)sender;

           myListBox .ItemsSource = PageVariables.eOUTData;//listboxSongsData;
           myListBox .SelectedIndex = 0;
           myListBox .Focus();
        }

谢谢, Subhen

1 个答案:

答案 0 :(得分:0)

很难确定您要在代码中尝试完成的任务。

一个想法: 您是否考虑过将内部ListBox更改为ItemsControl?如果您还需要滚动它,可以将其分层ScrollViewer

第二个想法(可能是另一个想法): 项目模板中创建的每个项目都在调用Loaded事件。你不希望这只发生一次吗?从内部ListBox中删除事件,并在加载外部列表后设置焦点。