在列表框中选择文本框项目不会更改列表框的选定项目

45 c# wpf xaml listbox selecteditem

我有一个wpf列表框,显示一个文本框列表.当我单击文本框时,列表框选择不会更改.我必须单击TextBox旁边的以选择列表框项.是否需要为Textbox设置一些属性以将click事件转发到Listbox?

Arc*_*rus 42

我们使用以下样式来设置PreviewGotKeyboardFocus,它处理TextBox控件和ComboBoxes的所有事件,如下所示:

    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
        </Style>
    </ListView.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

然后我们在后面的代码中选择行:

    protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
    {
        ListViewItem item = (ListViewItem) sender;
        item.IsSelected = true;
    }
Run Code Online (Sandbox Code Playgroud)

  • 这绝对是最好的方法.我有一个深层嵌套的层次结构,ListBoxes包含在其他ListBoxes中,以及其中包含的各种控件.这个方法很有效,因为它只使用ListBoxItem而不是包含的控件.一个建议的改变 - 直接选择项目更简单:item.IsSelected = true (2认同)
  • Grazer在下面有一个更好的答案 (2认同)
  • Grazer的答案很好,但并不适合所有应用程序。我要选择一个项目,然后单击删除按钮以删除选定的项目。单击删除按钮时,他的方法将失去对项目的关注。这一个完美的作品。 (2认同)

小智 37

请务必使用适当的TargetType:ListViewItem,ListBoxItem或TreeViewItem.

<Style TargetType="ListViewItem">
    <Style.Triggers>
        <Trigger Property="IsKeyboardFocusWithin" Value="true">
            <Setter Property="IsSelected" Value="true" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

  • 还有一个问题是,当ListView失去焦点时,它会导致选择被删除。下面的响应来自Arcturus更好 (2认同)

dot*_*zen 6

我没有足够的代表发表评论,所以我发表评论作为答案.Grazer的上述解决方案不适用于您需要另一个控件Button的情况SelectedItem.这是因为按照Style Trigger,IsKeyboardFocusWithin当你点击它时变为假Button,并且SelectedItem变为空.


Joe*_*oey 0

列表框处理项目选择,但不知道嵌入其中的文本框的焦点。如果您想在文本框获得输入焦点时更改选择,那么您需要手动更改列表框选择,据我所知。