WPF中两个不同选项卡中的两个自动完成框控件

3

我在一个WPF窗口中使用了两个AutoCompleteBox控件,分别放在不同的选项卡中。

第一个选项卡中的控件工作正常。第一个控件

但是第二个选项卡中的控件,数据绑定成功了,我也能在下拉列表中看到匹配的字符串。

但我无法使用鼠标或箭头键从列表中选择项目。第二个控件

当我将第二个控件移到新窗口中时,它可以正常工作。

我不明白实际问题是什么?

请查看以下代码:

第一个选项卡中的自动完成框

<ctrls:AutoCompleteBox  Grid.Column="1" x:Name="txtFirst" VerticalAlignment="Center" Margin="0,0,0,10" />

第二个选项卡中的自动完成框

<ctrls:AutoCompleteBox  Grid.Column="1" x:Name="txtSecond" VerticalAlignment="Center" Margin="0,0,0,10" />

选项卡控件的 Xaml 代码

<TabControl Grid.Row="1"
                    x:Name="tabCtrl"
                    SelectionChanged="tabCtrl_SelectionChanged">
            <TabItem x:Name="tab1"
                     Header="First">
                       <ScrollViewer>
                       <Grid>
                         <Grid.RowDefinitions>
                            <RowDefinition Height="auto" />
                          </Grid.RowDefinitions>
                           <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200" />
                            <ColumnDefinition Width="500" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="First"
                                   VerticalAlignment="Center"
                                   Margin="0,0,0,10" />
                        <ctrls:AutoCompleteBox  Grid.Column="1"
                                                x:Name="txtFirst"
                                                VerticalAlignment="Center"
                                                Margin="0,0,0,10" />
                      </Grid>
                      </ScrollViewer>
            </TabItem>        
            <TabItem x:Name="tab2"
                     Header="Second">
                       <ScrollViewer>
                       <Grid>
                         <Grid.RowDefinitions>
                            <RowDefinition Height="auto" />
                          </Grid.RowDefinitions>
                           <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200" />
                            <ColumnDefinition Width="500" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="Second"
                                   VerticalAlignment="Center"
                                   Margin="0,0,0,10" />
                        <ctrls:AutoCompleteBox  Grid.Column="1"
                                                x:Name="txtSecond"
                                                VerticalAlignment="Center"
                                                Margin="0,0,0,10" />
                       </Grid>
                      </ScrollViewer>
            </TabItem>        
 </TabControl>

并且背后的代码

var data = db.tblname.Select(c => c.propertyname).ToList();
txtFirst.ItemsSource = data;

var data1 = db.tblname.Select(c => c.propertyname).ToList();
txtSecond.ItemsSource = data1;

如果您不展示代码,我们无法真正地为您提供帮助。 - CodingMadeEasy
@CodingMadeEasy 我已经发布了代码,请帮忙。 - Jayakrishnan
2个回答

0

你的C#代码没问题。

你应该看一下XAML。

(也请向我们提供XAML。)


1
我已经发布了XAML代码。请查看图片以更好地理解。谢谢。 - Jayakrishnan
@jayakrishnanGounder,看起来你的XAML是正确的。有些东西阻止了你的第二个控件。如果你能提供一个包含你的项目的ZIP文件到DropBox/OneDrive/GoogleDrive临时文件夹中,我会去看一下。 - NoWar

0
经过对我的代码进行彻底的调试,我发现问题是由TabControl的SelectionChanged事件引起的。
每当我从Autocompletebox控件中选择一个项目时,TabControl的SelectionChanged事件就会被触发,这导致混乱,因为我的Autocompletebox的绑定逻辑在SelectionChanged事件中。
但我仍然不明白为什么我的Autocompletebox控件会在没有注册SelectionChanged事件的情况下触发TabControl的SelectionChanged事件。
但是下面的代码解决了这个问题。
private void tabCtrl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.Source is TabControl)
            {
              // Business logic for binding autocompletebox
            }
        }

感谢大家的支持!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接