我在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;
答案 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
}
}
感谢大家的支持!