【问题标题】:Listbox item selection programmatically以编程方式选择列表框项
【发布时间】:2017-02-14 04:57:16
【问题描述】:

我有一个带有 ListBox 的汉堡菜单,当我单击项目时,它会突出显示并导航到相关页面,但是当我单击 xaml 页面内的任何链接时,即使页面被导航,汉堡项目也不会改变。如何从后面的代码中选择和突出显示列表框项。

我从需要将列表框项更改为所需项的任何位置调用以下函数

public async static void ChangeSideBarItem()
{
    ADHome objADHome = new ADHome();
    string selected = App.SelectedPage;

    int x = objADHome.SideBarListBox.Items.IndexOf(selected);
    if (!String.IsNullOrEmpty(selected))
    {
        for (int index = 0; index < objADHome.SideBarListBox.Items.Count; index++)
        {
            HamburgerItemClass item = (HamburgerItemClass)objADHome.SideBarListBox.Items[index];

            string item1 = item.Title;
            if (selected == item1)
            {
                objADHome.SideBarListBox.SelectedItem = index;
                break;
            }
        }
    }
}

我通过从不同的 xaml 页面(订单页面)设置 App.SelectedPage 来调用上述方法,当我单击列表框(侧边栏)中的特定仪表板项目时,我有一个链接仪表板导航回仪表板页面应该突出显示

private void DashboardLink_Click(object sender, RoutedEventArgs e)
{
    App.SelectedPage = "Dashboard";
    ADHome.ChangeSideBarItem();
    this.Frame.Navigate(typeof(DashBoard));
}

但它没有被选中,当我调试它时,在 selecteditem 中显示 null

【问题讨论】:

    标签: xaml listbox uwp


    【解决方案1】:

    通常您可以将您的项目添加到 ListBox.SelectedItems 集合中:

    private void SelectButton_Click(object sender, RoutedEventArgs e)
    {
        // either by adding item from collection:
        myListBox.SelectedItems.Add(CollectionOfItems[1]);
    
        // or add from list itself:
        myListBox.SelectedItems.Add(myListBox.Items.Last());
    }
    

    【讨论】:

    • 对不起,我没听懂你的回答
    • @Murali 您问“如何设置从后面的代码中选择和突出显示的列表框项目” - 这是该问题的答案,您在 xaml 中将 ListBox 定义为 @ 987654322@ 将 ItemsSource 设置为 CollectionOfItems。我刚刚将其呈现为虚拟按钮单击事件。
    • 我的 collectionOfItems 绑定到列表框并且正在工作,但我想要的是更改所选项目而不单击汉堡菜单项中的项目(即列表框项目)。例如:我在菜单中有一个仪表板和订单项,当我单击仪表板时,Dashboard.xaml 导航到框架,并且该项目在汉堡菜单中突出显示(默认为列表框样式),但是当我有一个链接时Dashboard.xaml 页面,如 Goto OrdersPage,当我单击此时,OrdersPage.xaml 被导航到框架,但汉堡菜单仍然突出显示仪表板项。
    【解决方案2】:

    我认为您可以覆盖onNavigatedTo() 方法并将项目的颜色更改为默认值。在(Frame).Navigate() 中,将列表的.SelectedItem 作为参数传递给另一个框架以进行比较。 对不起我的英语。

    【讨论】:

      【解决方案3】:

      如果我们将 Collection 设置为ListBoxItemSource,我们应该可以使用 设置为ListBox.SelectedItem。当我的 Collection 是ObservableCollection&lt;Menu&gt; Menus 时,我们应该可以使用设置为ListBox.SelectedItemMenu 对象。

      例如:

      SideBarListBox.SelectedItem = Menus[1]; 
      

      如果我们通过以下代码设置ListBoxItem,我们应该可以使用ListBoxItem设置为ListBox.SelectedItem

      <ListBox Name="MyListBox">
          <ListBox.Items>
              <ListBoxItem Name="FristItem">
                  <StackPanel Orientation="Horizontal">
                      <TextBlock  FontFamily="Segoe MDL2 Assets" FontSize="36" Text="&#xE170;"></TextBlock>
                  </StackPanel>
              </ListBoxItem>
              <ListBoxItem Name="SecondItem">
                  <StackPanel Orientation="Horizontal">
                      <TextBlock  FontFamily="Segoe MDL2 Assets" FontSize="36" Text="&#xE171;"></TextBlock>
                  </StackPanel>
              </ListBoxItem>
          </ListBox.Items>
      </ListBox>
      

      顺便说一句,我们应该可以使用ListBox.SelectedIndex来设置选中项。

      当我们设置 SelectedItem 高亮时,如果你想改变它的其他颜色,我们应该可以使用ListBox.ContainerFromItem 来获得ListBoxItem。然后我们可以设置BackgroundForeground

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 2019-03-12
        相关资源
        最近更新 更多