首页 > 解决方案 > 当应用程序失去焦点/替代 IsKeyboardFocusWithin 时,最后一个焦点项目的视觉指示

问题描述

在具有多个要与之交互的面板或文档的应用程序中,需要清楚地指示应用程序的哪个区域具有焦点。Visual Studio 本身就是一个很好的例子。

下面的MCV 示例接近达到预期的效果。
但是,因为它使用IsKeyboardFocusWithin,所以当应用程序本身失去焦点时,不会维护应用程序中最近获得焦点的项目。

期望行为:当应用程序失去焦点时,保持由蓝色“SelectedColor”指示的焦点项。Visual Studio 执行此操作。

当应用失去焦点时,如何保持焦点指示?

示例图像

标签: wpfuser-interfacemvvmfocusdatatrigger

解决方案


部分答案:

当窗口失去焦点时,您可以通过将 MultiDataTrigger 条件更改为使用 IsFocused 而不是 IsKeyboardFocusWithin 来使焦点选项卡保持蓝色,如下所示:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding IsFocused, RelativeSource={RelativeSource Self}}" Value="true" />
        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
    </MultiDataTrigger.Conditions>
    <Setter TargetName="TabBorder" Property="Background" Value="{StaticResource SelectedColor}" />
</MultiDataTrigger>

但是,没有直接的方法可以知道 TabControl 的子项何时聚焦,以便您可以将边框变为蓝色。


推荐阅读