【问题标题】:WPF - Prevent ListView from losing focusWPF - 防止 ListView 失去焦点
【发布时间】:2014-09-19 21:40:31
【问题描述】:

我希望我的 ListView 中的选定项目在用户与日历控件交互时保持焦点。

当前,当用户单击列表中的项目时,它会突出显示。

当他们单击日历焦点时,我不想要。

如何防止我的日历从 ListView 中窃取焦点? 或者 如何防止我的 ListView 放弃焦点?

【问题讨论】:

  • 这个问题似乎不清楚。不清楚您是否希望 listView 始终具有实际焦点,或者您只是希望它始终具有突出显示颜色?

标签: c# .net wpf user-interface focus


【解决方案1】:

当用户与日历交互时,您无法阻止日历接收焦点

但您可以在 ListView 选定项没有焦点时影响其颜色
您需要设置未聚焦的 ListView 选定项的颜色
这些设置为透明,但只需选择一种颜色

<Style x:Key="ListViewItemNoColor" TargetType="ListViewItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
        <!-- Background of selected item when focussed -->
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
        <!-- Background of selected item when not focussed -->
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    </Style.Resources>
</Style> 

【讨论】:

  • 这就是我要找的。非常感谢!
【解决方案2】:

你的两个要求不一致。

根据定义,当用户与控件“交互”时,他们会赋予该控件焦点。您不能与Calendar 控件“交互”,而ListView 控件具有焦点。

您当然可以通过将IsEnabled 设置为false(以及其他方式)使Calendar 无法聚焦。您也可以在 ListView 上放置一个事件,以便在焦点丢失时“窃取”焦点,但您会使得与其他控件的交互变得非常困难,并且大多数交互都是不可能的。

您应该评估为什么它不能失去焦点并解决该要求。

【讨论】: