简体   繁体   English

WPF,如何在选择后重置组合框

[英]WPF, how to reset combobox after selection is made

I'd like to reset a combobox after every selection is made, to a default text value.我想在每次选择后将组合框重置为默认文本值。 This question was asked very well here but that solution didn't work for me at all.这个问题在这里问得很好,但那个解决方案对我根本不起作用。 A solution that did make sense to me is to set SelectedIndex to -1 and reset Text as shown below对我来说确实有意义的解决方案是将 SelectedIndex 设置为 -1 并重置 Text ,如下所示

MainWindow.xaml主窗口.xaml

<ComboBox Name="combobox" SelectionChanged="ComboBox_SelectionChanged" IsEditable="True" IsReadOnly="True" Text="My Default Text">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <Setter Property="Background" Value="Blue"/>
            <Setter Property="BorderBrush" Value="Blue"/>
            <Setter Property="BorderThickness" Value="0"/>
         </Style>
     </ComboBox.ItemContainerStyle>
     <ComboBoxItem Name="selection0">selection0</ComboBoxItem>
     <ComboBoxItem Name="selection1">selection1</ComboBoxItem>
     <ComboBoxItem Name="selection2">selection2</ComboBoxItem>
     <ComboBoxItem Name="selection3">selection3</ComboBoxItem>
     <ComboBoxItem Name="selection4">selection4</ComboBoxItem>
</ComboBox>

MainWindow.xaml.cs主窗口.xaml.cs

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string name = selectedItem.Name;
        if (selectedItem != null)
        {
            MessageBox.Show(string.Format(string));

            //This does set the combobox to empty, but no text is added.
            this.combobox.SelectedIndex = -1;
            this.combobox.Text = "My Default Text";
        }
     }

The SelectedIndex does successfully go to -1, but it stays empty. SelectedIndex 确实成功转到 -1,但它保持为空。 I'd like the text to go back to what it originally says, but I've had no luck.我希望文本回到它最初所说的内容,但我没有运气。 Any help is appreciated.任何帮助表示赞赏。

Once you've obtained the selected item, you can reset the ComboBox back to its default state, but you must do so in a separate Dispatcher message:获得所选项目后,您可以将ComboBox重置回其默认状态,但您必须在单独的Dispatcher消息中执行此操作:

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (this.combobox.SelectedItem != null)
    {
        MessageBox.Show(this.combobox.SelectedItem.ToString());
    }

    Action a = () => this.combobox.Text = "My Default Text";
    Dispatcher.BeginInvoke(a);
}

If you try to do it in the same message then your changes are effectively superseded by WPF's internal logic that runs once your event handler has completed.如果您尝试在同一条消息中执行此操作,那么您的更改将有效地被 WPF 的内部逻辑取代,该内部逻辑在您的事件处理程序完成后运行。

I use the DropDownOpened event in code behind to reset the ComboBox every time it is opened.我在后面的代码中使用 DropDownOpened 事件来在每次打开 ComboBox 时重置它。

    public partial class ChangeArticleAndSoftwareBundleRevisionDialog : UserControl
    {
        public Dialog()
        {
             InitializeComponent();

             ComboBox.DropDownOpened += ComboBox_DropDownOpened;
        }

        private void ComboBox_DropDownOpened(object sender, System.EventArgs e)
        {
              ComboBox combobox = (sender as ComboBox);

              combobox.SelectedIndex = 0;
              combobox.SelectedValue = null;
              combobox.SelectedItem = null;
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM