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)

Xaml列表框项焦点问题

你好,你可以在ListBox中添加下面的代码,这将解决ListBoxItem的焦点问题。

    <ListView.ItemContainerStyle>
        <Style TargetType="ContentControl">
            <Setter Property="Focusable" Value="False"/>
        </Style>
    </ListView.ItemContainerStyle>

这样做的原因是您有级联控件。当您使用箭头键时,列表框是活动控件,因此所有事件将基于列表框而不是按钮触发。

一种方法是在选定的项目上分配一个按键事件,然后启动将由按钮触发的功能。

类似:

listBox_keyPressed()
{
   if(selecteditem)
   {
      DoSomethingFor(selectedItem);
   }
}