FocusLost在用户控制[WPF]
问题描述:
FocusLost事件正在WPF的部件适当地 对于用户控件它是不同的:FocusLost在用户控制[WPF]
如果在用户控件的任何控制被点击或聚焦时,用户控件的FocusLost是立即开火!我怎样才能阻止它?
我解决不了这个问题:(
答
您可以在UserControl
检查IsKeyboardFocusWithin
以确定其子女的UserControl
或任何具有键盘焦点还是不行。还有的事件IsKeyboardFocusWithinChanged
,您可以使用,只是检查是否e.OldValue
是true
和e.NewValue
是在事件处理程序false
。
编辑。
这里是你如何能够使为例当IsKeyboardFocusWithin
变为错误时引发路由事件(UserControlLostFocus
)。
可用像
<my:UserControl1 UserControlLostFocus="userControl11_UserControlLostFocus"
../>
样品UserControl
public partial class UserControl1 : UserControl
{
public static readonly RoutedEvent UserControlLostFocusEvent =
EventManager.RegisterRoutedEvent("UserControlLostFocus",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(UserControl1));
public event RoutedEventHandler UserControlLostFocus
{
add { AddHandler(UserControlLostFocusEvent, value); }
remove { RemoveHandler(UserControlLostFocusEvent, value); }
}
public UserControl1()
{
InitializeComponent();
this.IsKeyboardFocusWithinChanged += UserControl1_IsKeyboardFocusWithinChanged;
}
void UserControl1_IsKeyboardFocusWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.OldValue == true && (bool)e.NewValue == false)
{
RaiseEvent(new RoutedEventArgs(UserControl1.UserControlLostFocusEvent, this));
}
}
}
+0
感谢例子和解释:) – icaptan
答
如果你不希望任何火焦点丢失你可以将它添加到XAML用户控件背后的源cs文件:
protected override void OnLostFocus(RoutedEventArgs e)
{
e.Handled = true;
}
e.handled = true; –