我有一个 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/