WPF/C#组合框仅在文本区域外检测到单击时更改选择

WPF/C#组合框仅在文本区域外检测到单击时更改选择,c#,wpf,combobox,C#,Wpf,Combobox,因此,在我的WPF应用程序中有几个组合框,当用户单击组合框项目的文本时,它们不会更改选择。要选择特定项目,必须单击文本的右侧或左侧。我有另一个组合框,当文本被点击时,它选择的很好。两者之间的唯一区别是数据绑定。单击文本时未选择的组合框将被数据绑定到一种或另一种类型的ObservableCollection。工作的组合框具有手动插入的静态值 我已经广泛地搜索了这个问题,我似乎找不到任何其他人有过这个问题或任何类似的问题。我没有设置任何奇怪的属性 以下是其中一个有问题的组合框的代码: <Com

因此,在我的WPF应用程序中有几个组合框,当用户单击组合框项目的文本时,它们不会更改选择。要选择特定项目,必须单击文本的右侧或左侧。我有另一个组合框,当文本被点击时,它选择的很好。两者之间的唯一区别是数据绑定。单击文本时未选择的组合框将被数据绑定到一种或另一种类型的ObservableCollection。工作的组合框具有手动插入的静态值

我已经广泛地搜索了这个问题,我似乎找不到任何其他人有过这个问题或任何类似的问题。我没有设置任何奇怪的属性

以下是其中一个有问题的组合框的代码:

<ComboBox HorizontalAlignment="Left" Margin="40,160,0,0" VerticalAlignment="Top" Width="132" ItemsSource="{Binding Path=Systems}" SelectedItem="{Binding Path=System}" SelectedIndex="0">
     <ComboBox.ItemTemplate>
         <DataTemplate>
             <ComboBoxItem Content="{Binding Path=Name}"/>
         </DataTemplate>
     </ComboBox.ItemTemplate>
 </ComboBox>

以下是该行为的视频:


在此处输入代码
假设我的组合框定义如下

 <ComboBox Name="cmb" Width="200" Height="20" DisplayMemberPath="PersonName" SelectedValuePath="PersonID">

    </ComboBox>
我的绑定是在代码隐藏中,这一步是不必要的,你可以在xaml中完成,我只是快速检查这么多脏代码

 public List<Person> source = new List<Person>();
    public MainWindow()
    {
        InitializeComponent();


        for (int i = 0; i < 20; i++)
        {
            source.Add(new Person() { PersonID = i.ToString(), PersonName = "Sau" + i.ToString() });
        }
        cmb.ItemsSource = source;
        this.DataContext = this;
    }
public List source=new List();
公共主窗口()
{
初始化组件();
对于(int i=0;i<20;i++)
{
Add(newperson(){PersonID=i.ToString(),PersonName=“Sau”+i.ToString()});
}
cmb.ItemsSource=来源;
this.DataContext=this;
}
因此,如果运行此示例,您将看到可以在单击文本本身时选择值


它的内容属性导致了一些问题,但我不是100%肯定这一点

这并没有解决问题。它仍然以同样的方式运行。我能做些什么来更好地调试它吗?我不知道我是否准确地描述了这个问题,或者我是否遗漏了一些重要的东西。还是一样。就绑定而言,它正在加载所有正确的数据,我也可以更改选择,除非我单击特定组合框项目文本的右侧或左侧,否则我无法更改选择。我尝试过使用IsReadOnly,结果也一样。这也发生在多台机器上。:),我也在挖掘这一点,这种奇怪的行为是如何发生的?人们希望能够单击组合框项目上的任意位置来选择它。正如我在上面的文章中提到的,我有另一个组合框,它可以按预期工作,但它的内容不是通过数据绑定加载的。我们已经对应用程序进行了一些可用性测试,每个人都注意到了这一点。这只是我想解决的一个烦恼。如果需要的话,我可以试着制作一个行为视频……这可能更好地解释到底发生了什么。我发现原因可能是这可以帮助你,更新我的答案。
 public List<Person> source = new List<Person>();
    public MainWindow()
    {
        InitializeComponent();


        for (int i = 0; i < 20; i++)
        {
            source.Add(new Person() { PersonID = i.ToString(), PersonName = "Sau" + i.ToString() });
        }
        cmb.ItemsSource = source;
        this.DataContext = this;
    }