为了账号安全,请及时绑定邮箱和手机立即绑定

WPF 建议文本框

WPF 建议文本框

C#
幕布斯6054654 2021-11-14 17:30:04
我构建了一个小的 WPF TextBox 来检查它的内容是否有效。现在我想实现提供建议的可能性。但不像互联网上的示例那样弹出一个带有建议的列表。我正在寻找一个示例,它可以像这样选择 TextBox:如果有我可以查找的特定名称或您知道的任何示例代码,请告诉我。
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

经过与 WPF 的大量斗争,我有一个为您工作的概念证明:


主窗口.xaml


<Window x:Class="Solutions.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"

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">

    <Grid>

        <TextBox VerticalAlignment="Center" HorizontalAlignment="Center" x:Name="SuggestionBox" Width="200"

                 />

    </Grid>

</Window>

主窗口.xaml.cs:


using System.Linq;

using System.Windows;

using System.Windows.Controls;


namespace Solutions

{

    public partial class MainWindow : Window

    {

        private static readonly string[] SuggestionValues = {

            "England",

            "USA",

            "France",

            "Estonia"

        };


        public MainWindow()

        {

            InitializeComponent();

            SuggestionBox.TextChanged += SuggestionBoxOnTextChanged;

        }


        private string _currentInput = "";

        private string _currentSuggestion = "";

        private string _currentText = "";


        private int _selectionStart;

        private int _selectionLength;

        private void SuggestionBoxOnTextChanged(object sender, TextChangedEventArgs e)

        {

            var input = SuggestionBox.Text;

            if (input.Length > _currentInput.Length && input != _currentSuggestion)

            {

                _currentSuggestion = SuggestionValues.FirstOrDefault(x => x.StartsWith(input));

                if (_currentSuggestion != null)

                {

                    _currentText = _currentSuggestion;

                    _selectionStart = input.Length;

                    _selectionLength = _currentSuggestion.Length - input.Length;


                    SuggestionBox.Text = _currentText;

                    SuggestionBox.Select(_selectionStart, _selectionLength);

                }

            }

            _currentInput = input;

        }

    }

}

下一步是将其转换为用户控件,以便您可以通过绑定设置您的建议,但您可以自行处理。


查看完整回答
反对 回复 2021-11-14
?
HUX布斯

TA贡献1876条经验 获得超6个赞

您可以通过稍微修改此处的解决方案来使用水印(尤其是仅 xaml 的答案非常简短)。只需将水印文本设置为您的第一个建议即可。您可以添加一些功能,例如在代码隐藏中按退格键时删除建议。


查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 242 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信