2011-08-18 90 views
4

FocusLost事件正在WPF的部件適當地 對於用戶控件它是不同的:FocusLost在用戶控制[WPF]

如果在用戶控件的任何控制被點擊或聚焦時,用戶控件的FocusLost是立即開火!我怎樣才能阻止它?

我解決不了這個問題:(

+0

e.handled = true; –

回答

9

您可以在UserControl檢查IsKeyboardFocusWithin以確定其子女的UserControl或任何具有鍵盤焦點還是不行。還有的事件IsKeyboardFocusWithinChanged,您可以使用,只是檢查是否e.OldValuetruee.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

1

如果你不希望任何火焦點丟失你可以將它添加到XAML用戶控件背後的源cs文件:

protected override void OnLostFocus(RoutedEventArgs e) 
{ 
    e.Handled = true; 
}