在组合框和WPF中组合框中的持久化标签之间切换(XAML)

在组合框和WPF中组合框中的持久化标签之间切换(XAML),wpf,xaml,combobox,wpf-controls,dropdown,Wpf,Xaml,Combobox,Wpf Controls,Dropdown,我是WPF新手,无法实现以下场景: 三个下拉框并排放置。我试过使用组合框。我试图借助图像来解释这些问题 示例:(参考图片) 我想选择任何一个名称/学校/电子邮件。假设我选择了Name1,那么我应该不能选择其他两个下拉列表中的任何一个-学校/电子邮件。但是,在我的实现中,我仍然可以从其他下拉列表中选择值 如果我改变主意,转到学校下拉列表并离开名称下拉列表,则名称下拉列表应将值从名称1(在步骤1中选择)更改为名称(这是该按钮的标题),在我的实现中,Name1和School1这两个选项都是持久的

我是WPF新手,无法实现以下场景: 三个下拉框并排放置。我试过使用组合框。我试图借助图像来解释这些问题 示例:(参考图片)

  • 我想选择任何一个名称/学校/电子邮件。假设我选择了Name1,那么我应该不能选择其他两个下拉列表中的任何一个-学校/电子邮件。但是,在我的实现中,我仍然可以从其他下拉列表中选择值
  • 如果我改变主意,转到学校下拉列表并离开名称下拉列表,则名称下拉列表应将值从名称1(在步骤1中选择)更改为名称(这是该按钮的标题),在我的实现中,Name1School1这两个选项都是持久的
我尝试在这两篇文章的帮助下实现这一点,我能得到的最接近的是我在上面的例子中提到的:和

注:姓名/学校/电子邮件不是水印。它们是按钮的标题,默认情况下,当您登录到该页面/窗口时,该按钮就在那里。
非常感谢您提供的任何帮助/资源。

如果要在代码隐藏中编码,您可以使用组合框的选择更改事件来设置每个组合框的文本:

<StackPanel Grid.Row="1" Orientation="Horizontal">
        <ComboBox x:Name="cmbName" ItemsSource="{Binding NameList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Text="Name"
                  SelectionChanged="cmbName_SelectionChanged" MinWidth="80" Margin="10" IsEditable="True" IsReadOnly="True"/>
        <ComboBox x:Name="cmbSchool" ItemsSource="{Binding SchoolList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Text="School"
                  SelectionChanged="cmbSchool_SelectionChanged" MinWidth="80" Margin="10" IsEditable="True" IsReadOnly="True"/>
        <ComboBox x:Name="cmbEmail" ItemsSource="{Binding EmailList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Text="Email"
                  SelectionChanged="cmbEmail_SelectionChanged" MinWidth="80" Margin="10" IsEditable="True" IsReadOnly="True"/>
</StackPanel>
对其他每个组合框执行相同的操作;只需分别更改组合框名称


如果您使用的是MVVM,那么请绑定每个组合框的SelectedItem和Text属性,并编写一个通用方法,将所选项目分别设置为null,并在每个绑定SelectedItem的setter中设置Text属性。

“我应该无法选择其他两个下拉列表中的任何一个。”“如果我改变主意并转到学校下拉列表”那么你是否能够访问其他组合框?我不确定我是否完全理解你的问题。我的意思是,如果我改变主意并从其他两个选项(学校/电子邮件)中选择一个选项。然后我的姓名1选择应改回姓名(下拉按钮上的姓名) .
private void cmbName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{      
        if(cmbName.SelectedItem != null)
        {
            cmbSchool.SelectedItem = null;
            cmbSchool.Text = "School";
            cmbEmail.SelectedItem = null;
            cmbEmail.Text = "Email";
        }
}