FocusLost事件正在WPF的部件適當地 對於用戶控件它是不同的:FocusLost在用戶控制[WPF]
如果在用戶控件的任何控制被點擊或聚焦時,用戶控件的FocusLost是立即開火!我怎樣才能阻止它?
我解決不了這個問題:(
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));
}
}
}
感謝例子和解釋:) – icaptan
如果你不希望任何火焦點丟失你可以將它添加到XAML用戶控件背後的源cs文件:
protected override void OnLostFocus(RoutedEventArgs e)
{
e.Handled = true;
}
e.handled = true; –