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中使用属性设置器符号,并且必须求助于情节提要,这将非常糟糕。我认为某种依附的行为可以结束这种模式。