【问题标题】:Toggle between combo-boxes and persist label in combo-box in WPF(XAML)在组合框之间切换并在 WPF(XAML)的组合框中保留标签
【发布时间】:2018-03-14 03:28:54
【问题描述】:

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

  • 我想选择任何一个 - 姓名/学校/电子邮件。假设我选择 Name1 ,那么我应该无法选择其他两个下拉列表中的任何一个 - School/Email。但是,在我的实现中,我仍然可以从其他下拉列表中选择值。
  • 如果我改变主意并转到 School 下拉菜单并离开 Name 下拉菜单,则 Name 下拉菜单的值应从 Name1(在步骤 1 中选择)到 Name(这是该按钮的标题),但是,在我的实现中,两个选择 - Name1School1 仍然存在。

我尝试在这两篇文章的帮助下实现这一点,我能得到的最接近的是我在上面的例子中提到的:How to display default text "--Select Team --" in combo box on pageload in WPF?Name on combobox in WPF

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

【问题讨论】:

  • "我应该无法选择其他两个下拉菜单中的任何一个" "如果我改变主意并转到学校下拉菜单"那么您能否访问其他组合框??
  • 我不确定我是否完全理解您的问题。我的意思是说,如果我改变主意并从其他两个选项(学校/电子邮件)中选择一个选项。那么我的 Name1 选择应该改回 Name(下拉按钮上的名称)。

标签: wpf xaml combobox wpf-controls dropdown


【解决方案1】:

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

<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>

在名称组合框的选择更改中执行以下操作:

private void cmbName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{      
        if(cmbName.SelectedItem != null)
        {
            cmbSchool.SelectedItem = null;
            cmbSchool.Text = "School";
            cmbEmail.SelectedItem = null;
            cmbEmail.Text = "Email";
        }
}

对其他每个组合框执行相同的操作;只需分别更改组合框名称即可。

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

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2017-05-28
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    相关资源
    最近更新 更多