Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于慢速打字机的WPF组合框_Wpf_Combobox - Fatal编程技术网

用于慢速打字机的WPF组合框

用于慢速打字机的WPF组合框,wpf,combobox,Wpf,Combobox,在我的WPF应用程序中,我使用一个组合框。 当用户想要选择一个项目时,他可以输入字母,组合框跳转到以这些字母开头的下一个条目。如果用户停止键入并在一定延迟后再次启动,则组合框假定用户已启动一个新词。这是通常的组合框行为,没有什么特别的。。。 问题是,我们的一些用户打字速度很慢。假设用户正在搜索一个新词,有没有办法在不使用组合框的情况下增加两个字母之间的输入时间? 希望你明白我的意思…你可以全力以赴,推出你自己的可过滤组合框。 查看此代码,看看它是否有帮助 XAML: <ComboBox x

在我的WPF应用程序中,我使用一个组合框。 当用户想要选择一个项目时,他可以输入字母,组合框跳转到以这些字母开头的下一个条目。如果用户停止键入并在一定延迟后再次启动,则组合框假定用户已启动一个新词。这是通常的组合框行为,没有什么特别的。。。 问题是,我们的一些用户打字速度很慢。假设用户正在搜索一个新词,有没有办法在不使用组合框的情况下增加两个字母之间的输入时间?
希望你明白我的意思…

你可以全力以赴,推出你自己的可过滤组合框。 查看此代码,看看它是否有帮助

XAML:

<ComboBox x:Name="myComboBox" TextBoxBase.TextChanged="myComboBox_TextChanged" DisplayMemberPath="myDisplay" IsEditable="True" StaysOpenOnEdit="True" SelectionChanged="myComboBox_SelectionChanged" />

然后,在引擎盖下:

ObservableCollection<myType> myCollection;
public ICollectionView cvs { get; set; }
public MyWindow()
{
    InitializeComponent();

    myCollection = new ObservableCollection<myType>();
    cvs = CollectionViewSource.GetDefaultView(myCollection);
    myComboBox.ItemsSource = cvs;
    cvs.Filter = FilterOut;
}

private void myComboBox_TextChanged(object sender, TextChangedEventArgs e)
{
    cvs.Refresh();
}

private bool FilterOut(object input)
{
    myType item = (myType)input;
    return ( string.IsNullOrEmpty(myComboBox.Text) || item.myDisplay.Contains(myComboBox.Text));
}
observedcollection myCollection;
公共ICollectionView cvs{get;set;}
公共MyWindow()
{
初始化组件();
myCollection=新的ObservableCollection();
cvs=CollectionViewSource.GetDefaultView(myCollection);
myComboBox.ItemsSource=cvs;
cvs.Filter=FilterOut;
}
私有void mycombox_TextChanged(对象发送者,textchangedventargs e)
{
cvs.Refresh();
}
专用布尔过滤器输出(对象输入)
{
myType项=(myType)输入;
return(string.IsNullOrEmpty(myComboBox.Text)| | item.myDisplay.Contains(myComboBox.Text));
}

看起来这个问题以前已经得到了回答:您是否考虑过使用
IsEditable=“True”
?这样,组合不会自动重新启动,但用户只需输入他们想要过滤项目的文本,按自己喜欢的方式键入和删除。换句话说,没有内置函数来增加时间@JamesHarcourt链接中的解决方案有一个用于过滤的文本框,与我的不完全相同,但我想这将有助于找到解决问题的正确方法(不违反mvvm规则可能会有点困难)。如果我理解正确,James Harcourt提到的链接@James Harcourt是关于类似自动完成搜索框行为的。这是一个最简单的默认windows组合框,对吗?我的猜测是,这类似于您键入内容时的windows资源管理器搜索。但在这个问题上,仍然没有人知道答案: