列表框项目初始化,但一旦选择了一个,我不知道如何重置没有选择任何项目的列表框
Posted
技术标签:
【中文标题】列表框项目初始化,但一旦选择了一个,我不知道如何重置没有选择任何项目的列表框【英文标题】:The Listbox items initialize but once one is selected I don't know how to RESET the listbox where neither item is selected 【发布时间】:2021-10-31 08:43:55 【问题描述】:如果您运行代码,则不会选择任何列表框项。如果您选择其中任何一个,它会保持选中状态,并相应地在文本框中显示“一”或“二”。单击 ResetListBox 按钮时,所选项目被取消选择(?可能),但保留灰色背景(不受欢迎)。一旦项目具有此浅灰色背景,onClick 事件将不再触发...文本框中不会添加其他文本。这个问题已经在整个网络上以各种形式提出,而我在这个简单示例中尝试的答案都没有奏效。
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="279.186" Width="401.98">
<Grid Margin="0,0,-6.8,-2.4">
<ListBox x:Name="ThanklessListBox" HorizontalAlignment="Left" Height="89" Margin="24,25,0,0" VerticalAlignment="Top" Width="117">
<ListBoxItem x:Name="ItemI" Content="ItemUno" Selected="ItemI_Selected"/>
<ListBoxItem x:Name="Item2" Content="ItemDos" Selected="Item2_Selected"/>
</ListBox>
<TextBox x:Name="StuffToShow" HorizontalAlignment="Left" Height="178" Margin="198,25,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="116"/>
<Button x:Name="ResetListBox" Content="ResetListBox" HorizontalAlignment="Left" Height="26" Margin="28,131,0,0" VerticalAlignment="Top" Width="116" Click="ResetListBox_Click"/>
<Button x:Name="SeleectButton" Content="SelectItemDos" HorizontalAlignment="Left" Height="24" Margin="28,179,0,0" VerticalAlignment="Top" Width="116" Click="SeleectButton_Click"/>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp1
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
private void ItemI_Selected(object sender, RoutedEventArgs e)
StuffToShow.Text += "\nOne";
private void Item2_Selected(object sender, RoutedEventArgs e)
StuffToShow.Text += "\nTwo";
private void SeleectButton_Click(object sender, RoutedEventArgs e)
ThanklessListBox.SelectedItem = 1; //Choose Dos
private void ResetListBox_Click(object sender, RoutedEventArgs e)
ThanklessListBox.SelectedItem = -1; //Deselect
【问题讨论】:
【参考方案1】:在您后面的代码中,您使用的是带整数的 SelectedItem。
private void ResetListBox_Click(object sender, RoutedEventArgs e)
ThanklessListBox.SelectedItem = -1; //Deselect
尝试使用 SelectedIndex
private void ResetListBox_Click(object sender, RoutedEventArgs e)
ThanklessListBox.SelectedIndex = -1; //Deselect
或选定项为空
编辑添加:你也可以这样做
ThanklessListBox.SelectedItems.Clear
这就是我认为现在删除帖子的其他人的意思>
平心而论,你可以通过浏览 MS 网站上的 online documentation for ListBox 真正了解这一点
【讨论】:
没有回答回答这个问题,但感谢您的努力。 ThanklessListBox.Clear()的使用;产生异常: System.InvalidOperationException: '只能在多种选择模式下更改 SelectedItems 集合。在单选模式下使用 SelectedItem。是的,我已经尝试过这个和许多其他的 attekmpts ......都失败了。我还没有尝试过的一种尝试是删除每个 ListBoxItem 并重新加载它们,但我肯定会在这项工作中遇到死胡同。我想知道一个成功测试的解决方案。那将不胜感激。 当我获取您的代码并将其更改为使用SelectedIndex = -1
而不是 SelectedItem = -1
时,它工作得很好。除非我误解了你想要做什么。
真诚的道歉。我的错。两个“索引”和“项目”的密切关系让我感到震惊。我很高兴有这个工作,不能感谢你。顺便说一句,我尝试删除并重新添加该项目并且效果很好,但当然这不是它的预期方式。
你好。我现在明白为什么我有无穷无尽的麻烦。在我的实际应用程序中,我试图清除您所指出的列表项选择,但在选定的事件代码中,而不是在我的示例中创建的单独的按钮事件中。在事件线程中,该命令将不起作用。我很抱歉我的问题错了,我仍然卡住了。我将创建实际尝试删除项目并将其添加回来看看是否有效。
您知道在这种情况下使用 MVVM 是否容易得多。将视图的DataContext
属性设置为指向某个实现INotifyPropertyChanged
接口的对象。给该对象一个“SelectedItem”属性。在 XAML 中,将 ListBox.SelectedItem
属性绑定到数据上下文中的 SelectedItem 属性。那么如果要清除SelectedItem,只需在DataContext中设置为null即可,以上是关于列表框项目初始化,但一旦选择了一个,我不知道如何重置没有选择任何项目的列表框的主要内容,如果未能解决你的问题,请参考以下文章