我有一个 ListBoxItem 的数据模板,其中包含几个按钮和几个自定义控件,如网格或图表。每个按钮都绑定(bind)到适当的命令处理程序,ListView 控件的 SelectedIndex 属性也绑定(bind)到 ViewModel 的属性。

问题 :在命令处理程序(绑定(bind)到按钮)中,我无法解析当前选定的项目/索引,因为在单击 ListBox 项目中的按钮或其他控件时它没有改变,但是当我单击 ListBoxItem 时区域本身 - SelectedIndex 正在改变。

问题是 如何在单击 ListBoxItem 中的任何控件时触发 SelectedIndex 更改?

最佳答案

将此添加到您的 ListBox.Resources

<ListBox.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                <Setter Property="IsSelected" Value="True" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ListBox.Resources>

编辑

前面的方法只会在 ListBoxItem 具有键盘焦点时选择它。如果您将焦点移出 ListBoxItem,它会再次变为未选中状态。

这是当键盘焦点在项目内移动时选择 ListBox 项目的另一种简单方法,当焦点移出 ListBoxItem 时它保持选中状态
<Style TargetType="{x:Type ListBoxItem}">
    <EventSetter Event="PreviewGotKeyboardFocus" Handler="SelectCurrentItem"/>
</Style>

在背后的代码中
protected void SelectCurrentItem(object sender, KeyboardFocusChangedEventArgs e)
{
    ListBoxItem item = (ListBoxItem)sender;
    item.IsSelected = true;
}

关于c# - 单击 ListBoxItem 区域内的任何控件时触发 SelectedIndex 已更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6680987/

10-09 05:56