如何确定是什么导致了WPF文本框的GotFocus事件-鼠标单击或TAB键?

如何确定是什么导致了WPF文本框的GotFocus事件-鼠标单击或TAB键?,wpf,textbox,focus,mouse,tabs,Wpf,Textbox,Focus,Mouse,Tabs,如何确定是什么导致了WPF文本框的GotFocus事件-鼠标单击或TAB键? 如果使用TAB键设置焦点,我需要更改边框颜色;如果使用鼠标单击设置焦点,我需要保留边框的标准颜色。因此,我需要从事件参数中提取导致事件的原因,或者(更好)写入触发器以将其转换为文本框样式。我建议使用OnKeyUp和OnMouseUp事件而不是GotFocus事件来确定这一点。在OnKeyUp中,您需要测试(请参阅Eventargs)按下的是Tab键。是否可以扩展WPF文本框,然后将其用于所有文本框?然后,您可以有一些被

如何确定是什么导致了WPF文本框的GotFocus事件-鼠标单击或TAB键?
如果使用TAB键设置焦点,我需要更改边框颜色;如果使用鼠标单击设置焦点,我需要保留边框的标准颜色。因此,我需要从事件参数中提取导致事件的原因,或者(更好)写入触发器以将其转换为文本框样式。

我建议使用OnKeyUp和OnMouseUp事件而不是GotFocus事件来确定这一点。在OnKeyUp中,您需要测试(请参阅Eventargs)按下的是Tab键。

是否可以扩展WPF文本框,然后将其用于所有文本框?然后,您可以有一些被覆盖的事件来确定您是如何聚焦的,或者进行边界更改

class MySpecialTextBox : TextBox
{
    protected override void OnIsKeyboardFocusWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e)
    {
        // Focused by keyboard
    }

    protected override void OnMouseUp(System.Windows.Input.MouseButtonEventArgs e)
    {
        // Focused by mouse
    }

    protected override void OnIsMouseCaptureWithinChanged(System.Windows.DependencyPropertyChangedEventArgs e)
    {
        // Focused by mouse
    }
}

是的,我可以,但对我来说,最好使用样式触发器,因为我想让它成为样式的一部分。可能吗?问题是,我想创建一个ExpressionLight样式的副本,它更像expression light的真实样式,而不是WPFToolkit中的样式。