wpf

时间:2015-11-25 17:46:42

标签: c# asp.net wpf

我在wpf窗口的两个不同选项卡中使用了两个AutoCompleteBox控件。

第一个标签中的控件工作正常。 First Control

但是第二个标签中的控件,数据是绑定的,我可以在下拉列表中看到匹配的字符串。

我无法使用鼠标或箭头键从列表中选择项目。 Second Control

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

我无法理解实际问题是什么?

请在下面找到代码:

第一个标签页中的自动填充功能

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

2 个答案:

答案 0 :(得分:0)

您的C#代码没问题。

你应该看看XAML。

(也向我们提供XAML。)

答案 1 :(得分:0)

彻底调试我的代码后,我发现问题是由于TabControl的SelectionChanged事件造成的。

每当我从Autocompletebox控件中选择一个项目时,TabControl的SelectionChanged事件就会被触发,这导致混乱,因为我的Autocompletebox的绑定逻辑是在SelectionChanged事件中。

我仍然无法理解为什么我的Autocompletebox控件触发了TabControl的SelectionChanged事件而没有为自动完成框控件注册SelectionChanged事件。

但是下面的代码克服了问题

private void tabCtrl_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.Source is TabControl)
            {
              // Business logic for binding autocompletebox
            }
        }

感谢大家的支持!