C# 当子控件具有焦点时,如何在WPF列表框上锁定SelectedIndex

C# 当子控件具有焦点时,如何在WPF列表框上锁定SelectedIndex,c#,wpf,C#,Wpf,我现在有 <Style x:Key="ListboxItemStyle" TargetType="{x:Type ListBoxItem}"> <Style.Triggers> <Trigger Property="IsKeyboardFocusWithin" Value="True"> <Setter Property="IsSelected" Value="True" /> <

我现在有

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

但是,问题是,当输入时,SelectedIndex返回到
-1
在UI焦点上提供一些其他控件。我现在的样子 例如,当一个子对象获得焦点时,会选择
ListBoxItem

但当孩子失去焦点时不会重置。

EventTrigger
替换
触发器
,然后
IsSelected
不会返回原始状态:

<EventTrigger RoutedEvent="PreviewGotKeyboardFocus">
    <BeginStoryboard>
        <Storyboard>
            <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsSelected">
                <DiscreteBooleanKeyFrame Value="True" KeyTime="0:0:0" />
            </BooleanAnimationUsingKeyFrames>
        </Storyboard>
    </BeginStoryboard>                          
</EventTrigger>

与Trigger不同,EventTrigger没有状态终止的概念,因此一旦引发事件的条件不再为true,操作将不会撤消


注:我只为
SelectionMode=“Single”
尝试过这个功能。

不是你想要的吗?如果您不需要代码隐藏的事件处理程序,并且需要通过绑定进行通知,则可以将处理程序包装为行为。是的,这是可行的,但如果您不能在EventTrigger中使用属性设置器符号,并且必须求助于情节提要,这将非常糟糕。我认为某种依附的行为可以结束这种模式。