C# WPF:关闭项目选择上的组合框并显示消息框
目标我在WPF中有Combobox,每当用户从Combobox中选择项目时,我都希望关闭Combobox(将旧值显示为选定值),并使用Ok/Cancel按钮显示MessageBox。如果用户单击“确定”,则应设置新的选定值,否则应返回 问题当我选择项目时,我能够显示消息框和打开的组合框,这是我不想要的。一旦用户选择某个内容,我就要关闭组合框并显示Messagebox 我怎么能做到 XMAL代码C# WPF:关闭项目选择上的组合框并显示消息框,c#,wpf,combobox,C#,Wpf,Combobox,目标我在WPF中有Combobox,每当用户从Combobox中选择项目时,我都希望关闭Combobox(将旧值显示为选定值),并使用Ok/Cancel按钮显示MessageBox。如果用户单击“确定”,则应设置新的选定值,否则应返回 问题当我选择项目时,我能够显示消息框和打开的组合框,这是我不想要的。一旦用户选择某个内容,我就要关闭组合框并显示Messagebox 我怎么能做到 XMAL代码 <ComboBox Name="Currency" Grid.Row="1" Grid.Col
<ComboBox Name="Currency" Grid.Row="1" Grid.Column="5" ItemsSource="{Binding comboboxSource}"
SelectedValuePath="Value.bank_currency" IsReadOnly="False" IsTextSearchEnabled="True" TextSearch.TextPath="Value.bank_currency"
SelectedItem="{Binding SelectedBankCurrency, UpdateSourceTrigger=LostFocus,Mode=Twoway}">
您可以跨越.Net线程池上的任务,并通过dispatcher显示消息框。您可以在
SelectionChanged
事件上执行此操作
selectedItem
字段跟踪以前选择的项目,以便在没有货币变化时不会显示MessageBox
。如果所选项目已更改,则会在显示消息框之前隐藏下拉菜单。然后,如果用户单击“取消”,则会还原更改,否则会将当前选择存储在selectedItem
中,以便将来进行比较
private object selectedItem = null;
private void Currency_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (Currency.SelectedItem == selectedItem)
return;
Currency.IsDropDownOpen = false;
MessageBoxResult result = MessageBox.Show("Are you sure you want to change the currency?",
"Warning",
MessageBoxButton.OKCancel,
MessageBoxImage.Question);
if (result == MessageBoxResult.Cancel)
Currency.SelectedItem = selectedItem;
else
selectedItem = Currency.SelectedItem;
}
if(result!=MessageBoxResult.Cancel)\u selectedCurrency=value
@Vyrira我已经试过了,但是这个组合框也没有关闭,并且与MessageBox重叠。你没有访问货币组合框的权限吗?您可以设置Currency.IsDropDownOpen=false代码>显示消息框之前。请使用SelectionChanged
事件。我注意到您尚未将IsEditable
设置为True
,是否正在使用?如果没有,有一个简单的解决方案来实现你的目标。
private void Combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (DataContext == null)
return;
var combo = (sender as ComboBox);
if (combo != null && combo.IsDropDownOpen)
{
combo.IsDropDownOpen = false;
var binding = combo.GetBindingExpression(ComboBox.SelectedItemProperty);
binding.UpdateSource();
binding.UpdateTarget();
}
}`
private object selectedItem = null;
private void Currency_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (Currency.SelectedItem == selectedItem)
return;
Currency.IsDropDownOpen = false;
MessageBoxResult result = MessageBox.Show("Are you sure you want to change the currency?",
"Warning",
MessageBoxButton.OKCancel,
MessageBoxImage.Question);
if (result == MessageBoxResult.Cancel)
Currency.SelectedItem = selectedItem;
else
selectedItem = Currency.SelectedItem;
}