c# - WPF:在 TextBox 具有焦点时为 ListBox 设置 IsSelected,而不会在 LostFocus 上丢失选择

标签 c# wpf xaml textbox listbox

我有一个带有 ListBoxItemsListBox 和一个模板,因此它们包含 TextBoxes

ListBox with Textboxes

TextBox 获得焦点时,我希望选择 ListBoxItem。我发现的一种解决方案如下所示:

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

这很好用,但是当 TextBox 失去焦点时,选择也会失去焦点。

有没有办法防止这种情况发生?

最佳答案

我发现没有代码隐藏的最佳解决方案是:

<Style TargetType="{x:Type ListBoxItem}">
    <Style.Triggers>
        <EventTrigger RoutedEvent="PreviewGotKeyboardFocus">
            <BeginStoryboard>
                <Storyboard>
                    <BooleanAnimationUsingKeyFrames
                        Storyboard.TargetProperty="(ListBoxItem.IsSelected)">

                        <DiscreteBooleanKeyFrame KeyTime="0" Value="True"/>
                    </BooleanAnimationUsingKeyFrames>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>

关于c# - WPF:在 TextBox 具有焦点时为 ListBox 设置 IsSelected,而不会在 LostFocus 上丢失选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366806/

相关文章:

WPF - 使用变量/参数创建可重用样式

wpf - 直接路由事件问题

c# - Microsoft Office 365 在 iOS 中开发

c# - WCF 部署到 Azure Entity Framework 方法返回异常

wpf - 什么是 "Page Function"?

c# - Xaml C# 中 Windows 8 商店应用程序的游戏循环

wpf - 使用 ItemTemplate 在 ListBoxItems 构建上添加事件

c# - 访问 HubSection 内的数据

c# - 如何使用 JSON.NET 遍历嵌套字典?

c# - 何时接收 TCP 消息