Xaml列表框项焦点问题
本文关键字:焦点 问题 列表 Xaml | 更新日期: 2023-09-27 17:52:48
我正在使用一个xaml UserControl作为WPF应用程序的一部分。我已经创建了一个列表框,其中填充了来自文本搜索的数据。这些数据显示在按钮上,按钮用于从搜索中选择用户想要的选项。
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto"
Margin="2">
<ListBox ItemsSource="{Binding Path=CrewOptions}"
HorizontalContentAlignment="Stretch"
BorderThickness="0"
SelectionMode="Multiple"
Name="CrewOptionsListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Button x:Name="irrelevant"
Height="28px"
Background="#F4F3E9"
Margin="2,2,2,2"
Content="{Binding irrelevant1, TargetNullValue={x:Static sys:String.Empty}}"
Command="{Binding irrelevant2}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}"
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</ScrollViewer>
这工作得很好,但是当我从文本框tab到列表框,然后使用箭头键选择一个选项,回车键不选择按钮。相反,在按下回车键选择之前,我必须再次tab键来聚焦按钮。
有什么方法可以避免点击最后一个标签键来关注按钮吗?
同时支持Xaml和c#解决方案(最好是MVVM)
你好,你可以在ListBox中添加下面的代码,这将解决ListBoxItem的焦点问题。
<ListView.ItemContainerStyle>
<Style TargetType="ContentControl">
<Setter Property="Focusable" Value="False"/>
</Style>
</ListView.ItemContainerStyle>
这样做的原因是您有级联控件。当您使用箭头键时,列表框是活动控件,因此所有事件将基于列表框而不是按钮触发。
一种方法是在选定的项目上分配一个按键事件,然后启动将由按钮触发的功能。
类似:
listBox_keyPressed()
{
if(selecteditem)
{
DoSomethingFor(selectedItem);
}
}