【问题标题】:How to select an item in the Silverlight Treeview?如何在 Silverlight Treeview 中选择一个项目?
【发布时间】:2010-11-26 13:02:57
【问题描述】:

我在 Silverlight 的 TreeView 中选择第一个 TreeViewItem 时遇到问题。下面的代码只是在方法 SelectFistItemInCatTreeView 中给出了一个空值。为什么?有什么想法吗?

<controls:TreeView  x:Name="treeCategories" Grid.Column="1" Grid.Row="2" SelectedItemChanged="treeCategories_SelectedItemChanged">
  <controls:TreeView.ItemTemplate>
    <common:HierarchicalDataTemplate  ItemsSource="{Binding SubCats}">
      <StackPanel >
        <TextBlock Text="{Binding Name}"></TextBlock>
      </StackPanel>
    </common:HierarchicalDataTemplate>
  </controls:TreeView.ItemTemplate>
</controls:TreeView> 



1            public MainPage()
2            {
3                InitializeComponent();
4    
5                DBService.DocTrackingServeceClient webService = new DockTracking.DBService.DocTrackingServeceClient();
6                webService.GetDocCategoriesCompleted += new EventHandler(webService_GetDocCategoriesCompleted);
7                webService.GetDocCategoriesAsync();
8                treeCategories.Loaded += new RoutedEventHandler(treeCategories_Loaded);
9            }
10   
11           void webService_GetDocCategoriesCompleted(object sender, DockTracking.DBService.GetDocCategoriesCompletedEventArgs e)
12           {
13   
14               List cats = new List();
15               cats = GetCats(e.Result.ToList(), null);
16               treeCategories.ItemsSource = cats;
17           }
18   
19           void treeCategories_Loaded(object sender, RoutedEventArgs e)
20           {
21               SelectFistItemInCatTreeView();
22           }
23   
24           private void SelectFistItemInCatTreeView()
25           {
26               TreeViewItem item = treeCategories.ItemContainerGenerator.ContainerFromItem(treeCategories.Items[0]) as TreeViewItem;
27               if (item != null)
28               {
29                   item.IsSelected = true;
30               }
31           }

【问题讨论】:

    标签: silverlight treeview


    【解决方案1】:

    在获取 TreeViewItem 之前调用 UpdateLayout() 可以解决问题:

    private void SelectFistItemInCatTreeView()
    {
    
      treeCategories.UpdateLayout();
    
      TreeViewItem item = treeCategories.ItemContainerGenerator.ContainerFromItem(treeCategories.Items[0]) as TreeViewItem;
      if (item != null)
      {
        item.IsSelected = true;
      }
    }
    

    【讨论】:

      【解决方案2】:

      看起来应该将 ContainerFromItem 方法传递给您要绑定的实际项目,而不仅仅是 tv.Items[0]。

      我会看看以下内容:

      【讨论】:

        【解决方案3】:

        如果您有分层数据,这仅在选择顶级项目时有效。 要选择顶层下的子项,您必须展开并遍历树,直到创建所需项的 TreeViewItem。

        See this page for TreeViewExtended

        他的 TreeViewExtended 类有一个名为 SetSelectedItem 的方法,它确实有效!

        【讨论】:

        • 我已经尝试过 SetSelectedItem 方法,但它对我不起作用。无论如何,关于树视图的文章很棒,并在其他情况下帮助了我。
        • 链接不再工作。感谢微软弄乱了所有 silverlight 资源链接。
        猜你喜欢
        • 2011-02-23
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多