【问题标题】:How to latch the SelectedIndex on a WPF listbox when a child control has focus当子控件具有焦点时如何在 WPF 列表框上锁定 SelectedIndex
【发布时间】:2013-07-15 08:41:17
【问题描述】:

我现在有

<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 但不会在孩子失去焦点时重置。

【问题讨论】:

  • this 不是您要找的东西吗?如果您不想要代码隐藏事件处理程序并且需要通过绑定进行通知,则可以将处理程序包装到行为中。

标签: c# wpf


【解决方案1】:

Trigger 替换为EventTrigger,然后IsSelected 不会恢复到原始状态:

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

来自MSDN

与触发器不同,EventTrigger 没有状态终止的概念,因此一旦引发事件的条件不再为真,该操作将不会被撤消。

PS:我只为SelectionMode="Single" 尝试过这个。

【讨论】:

  • 是的,这行得通,但是您不能在 EventTrigger 中使用属性设置器表示法并且必须求助于情节提要,这完全令人讨厌。我认为某种附加行为可以将这种模式包装起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多