XAML UWP组合框行为:下拉菜单打开时保存用户输入

kxkpmulp  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(125)

我正在使用UWP,xaml,c#制作应用程序
我有一个包含预制值列表的组合框:一二三四五我使组合框可编辑,因为我希望用户能够输入任何值。
如果用户单击文本框并输入一个值,然后单击控件外部的任意位置,则输入的值将显示在文本框中,并且控件将脱离。正如我所期望和喜欢的。
但是,如果用户打开下拉列表并在文本框中写入一个值,然后在控件外部单击以关闭它,则输入的值不会保存,而是恢复为以前的值。为了保存值,用户必须第二次单击下拉按钮以关闭下拉列表并保存用户输入的值,或者在单击外部之前按Enter键保存。
对我来说,这不是直观的行为,需要额外的输入,从用户,我不明白为什么有这种差异的行为时,下拉菜单是打开或关闭?
如果下拉菜单已经打开,当在控件外单击时,是否可以保存用户输入的值?
希望这个问题有意义。

ukqbszuj

ukqbszuj1#

这里有一个解决方法,您可以在下拉框关闭之前保存文本框的值,并在下拉框关闭之后设置它。它使用三个事件LosingFocusSelectionChangedDropDownClosed

<ComboBox x:Name="ComboTest" Height="80" Width="296" ItemsSource="{x:Bind items}" 
                  IsEditable="True" LosingFocus="ComboTest_LosingFocus" SelectionChanged="ComboTest_SelectionChanged" DropDownClosed="ComboTest_DropDownClosed"/>
public sealed partial class MainPage : Page
{
    ObservableCollection<string> items = new ObservableCollection<string>();

    private string comboText = "";
    public MainPage()
    {
        this.InitializeComponent();

        items.Add("A");
        items.Add("B");
        items.Add("C");
        items.Add("D");
    }

    private void ComboTest_LosingFocus(UIElement sender, LosingFocusEventArgs args)
    {
        ComboBox comboBox = sender as ComboBox;
        comboText = comboBox.Text;
    }

    private void ComboTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ComboBox comboBox = sender as ComboBox;
        comboText = comboBox.SelectedValue.ToString();
    }

    private void ComboTest_DropDownClosed(object sender, object e)
    {
        ComboBox comboBox = sender as ComboBox;
        comboBox.Text = comboText;
    }
}

相关问题