wpf中两个不同选项卡中的两个AutoCompleteBox控件
本文关键字:两个 控件 AutoCompleteBox wpf 选项 | 更新日期: 2023-09-27 18:24:39
我在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" />
Tab控件的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;
您的C#代码很好。
你应该看看XAML。
(也向我们提供XAML。)
在对我的代码进行彻底调试后,我发现问题是由TabControl的SelectionChanged事件引起的。
每当我从自动完成框控件中选择一个项目时,TabControl的SelectionChanged事件就会被触发,这会导致混乱,因为我的自动完成框绑定逻辑处于SelectionChanged事件中。
我仍然不明白为什么我的自动完成框控件在没有为自动完成框控制注册SelectionChanged事件的情况下触发TabControl的SelectionChanged事件。
但是下面的代码克服了这个问题
private void tabCtrl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
// Business logic for binding autocompletebox
}
}
感谢大家的支持!