如何在WPF中检查任何三个控件是否同时拥有焦点?

4
我有三个文本框...我想检查这三个文本框中是否有任何一个获得了焦点。
我尝试了这样的方法->在ViewModel中添加了三个属性...其值将通过失去/获得焦点事件进行切换。(我是通过使用附加属性来实现的)。但是,在这种情况下…如果我从一个文本框移到下一个文本框…第一个文本框的焦点变为false…下一个文本框还没有设置…所以在这种情况下,这三个文本框都没有焦点…但第二个文本框很快就会获得焦点。
作为一种解决方法,我正在尝试使用组合框...来检查这个控件是否具有焦点,而不是检查所有三个文本框。请告诉我这种方法是否可行。
1个回答

13

为什么需要知道它们是否具有焦点?

焦点是一个视图特定的功能,因此我希望你的ViewModels不会关心它。

通常,如果我根据控件焦点执行某些操作,那么这是针对视图特定操作例如数据触发器,而在这种情况下我使用代码后台或触发器。

代码后台示例

if (tb1.IsFocused||  tb2.IsFocused || tb3.IsFocused)
{
    DoSomething();
}

触发器示例

<Style.Triggers>
    <DataTrigger Binding="{Binding IsFocused, ElementName=tb1}" Value="True">
        <Setter Property="BorderBrush" Value="Red" />
    </DataTrigger>

    <DataTrigger Binding="{Binding IsFocused, ElementName=tb2}" Value="True">
        <Setter Property="BorderBrush" Value="Red" />
    </DataTrigger>
    <DataTrigger Binding="{Binding IsFocused, ElementName=tb3}" Value="True">
        <Setter Property="BorderBrush" Value="Red" />
    </DataTrigger>
</Style.Triggers>

谢谢。帮我快速解决问题。 - rajibdotnet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接