WPF中的自动完成文本框
是否可以在WPF中自动完成文本框 我发现了一个示例,其中使用了组合框,并通过编辑样式模板删除了三角形 有更好的解决方案吗?您可以在中找到,也可以通过NuGet获得 本文演示如何创建一个文本框,该文本框可以在运行时根据输入(在本例中为磁盘驱动器文件夹)自动建议项目。WPF中的自动完成文本框,wpf,textbox,autocomplete,wpf-controls,Wpf,Textbox,Autocomplete,Wpf Controls,是否可以在WPF中自动完成文本框 我发现了一个示例,其中使用了组合框,并通过编辑样式模板删除了三角形 有更好的解决方案吗?您可以在中找到,也可以通过NuGet获得 本文演示如何创建一个文本框,该文本框可以在运行时根据输入(在本例中为磁盘驱动器文件夹)自动建议项目。 还可以看看这个漂亮的,它对我来说非常有用。或者您可以通过单击自动完成框将其添加到工具箱中,然后选择项,转到WPF组件,键入位于System.Windows.Controls命名空间上的筛选器自动完成框,然后将其拖动到您的xaml文件
还可以看看这个漂亮的,它对我来说非常有用。或者您可以通过单击自动完成框将其添加到工具箱中,然后选择项,转到WPF组件,键入位于System.Windows.Controls命名空间上的筛选器自动完成框,然后将其拖动到您的xaml文件中。这比做其他事情要容易得多,因为AutoCompleteBox是一个本机控件。在这里,工具箱的fork包含到4.O的端口
这对我来说非常有效。我在CodePlex.com的WPF中发布了一个WPF自动完成文本框。您可以从下载并试用。是我在2015年使用的版本。我想我会把它放在这里,因为这个问题是谷歌“wpf自动完成文本框”列表中的第一个问题
xmlns:behaviors=“clr命名空间:WPFTextBoxAutoComplete;assembly=WPFTextBoxAutoComplete”
列表(测试项):
我想这比上面列出的其他选项更容易开始和管理。我知道这是一个非常古老的问题,但我想补充一个我已经想到的答案 首先,您需要为
文本框
的正常文本更改
事件处理程序提供一个处理程序:
private bool InProg;
internal void TBTextChanged(object sender, TextChangedEventArgs e)
{
var change = e.Changes.FirstOrDefault();
if ( !InProg )
{
InProg = true;
var culture = new CultureInfo(CultureInfo.CurrentCulture.Name);
var source = ( (TextBox)sender );
if ( ( ( change.AddedLength - change.RemovedLength ) > 0 || source.Text.Length > 0 ) && !DelKeyPressed )
{
if ( Files.Where(x => x.IndexOf(source.Text, StringComparison.CurrentCultureIgnoreCase) == 0 ).Count() > 0 )
{
var _appendtxt = Files.FirstOrDefault(ap => ( culture.CompareInfo.IndexOf(ap, source.Text, CompareOptions.IgnoreCase) == 0 ));
_appendtxt = _appendtxt.Remove(0, change.Offset + 1);
source.Text += _appendtxt;
source.SelectionStart = change.Offset + 1;
source.SelectionLength = source.Text.Length;
}
}
InProg = false;
}
}
然后制作一个简单的PreviewKeyDown
处理程序:
private static bool DelKeyPressed;
internal static void DelPressed(object sender, KeyEventArgs e)
{ if ( e.Key == Key.Back ) { DelKeyPressed = true; } else { DelKeyPressed = false; } }
在本例中,“文件”是应用程序启动时创建的目录名列表
然后只需附加处理程序:
public class YourClass
{
public YourClass()
{
YourTextbox.PreviewKeyDown += DelPressed;
YourTextbox.TextChanged += TBTextChanged;
}
}
使用此选项,您选择放入
列表中的任何内容都将用于自动完成框。如果您希望有一个庞大的自动完成列表,那么这可能不是一个好的选择,但在我的应用程序中,它只能看到20-50个项目,因此它可以非常快速地循环。如果您有少量的值要自动完成,您可以简单地将它们添加到xaml中。键入将调用自动完成,另外还有下拉列表
<ComboBox Text="{Binding CheckSeconds, UpdateSourceTrigger=PropertyChanged}"
IsEditable="True">
<ComboBoxItem Content="60"/>
<ComboBoxItem Content="120"/>
<ComboBoxItem Content="180"/>
<ComboBoxItem Content="300"/>
<ComboBoxItem Content="900"/>
</ComboBox>
我很惊讶为什么没有人建议使用WinForms文本框
XAML:
C#:
使用Autocomplete时,您需要在代码隐藏中执行,因为出于某些原因,其他人可能会解释,它会引发异常。System.Windows.Controls.AutoCompleteBox
不是WPF的一部分。您必须添加对的引用才能使用该控件。@我添加了visual studio 2013的wpf工具包。但仍无法在工具箱中看到“自动完成”框。这是为什么?适用于内联自动完成,但不提供带有选项的下拉列表。@lambinator-是-否下拉列表。从设计角度来看,如果我只有几个项目(假设这是GitHub上的WPF工具包的良好开端):
<WindowsFormsHost Margin="10" Width="70">
<wf:TextBox x:Name="textbox1"/>
</WindowsFormsHost>
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
AutoCompleteStringCollection stringCollection = new AutoCompleteStringCollection(){"String 1", "String 2", "etc..."};
textbox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
textbox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
textbox1.AutoCompleteCustomSource = stringCollection;