View difference between Paste ID: Q5v53k6c and
SHOW:
|
|
- or go back to the newest paste.
1 | - | |
1 | + | public class FocusManagerExtensions |
2 | { | |
3 | public static readonly DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached("IsFocused", typeof(bool?), typeof(FocusManagerExtensions), new FrameworkPropertyMetadata(IsFocusedChanged)); | |
4 | public static bool? GetIsFocused(DependencyObject element) | |
5 | { | |
6 | if (element == null) { | |
7 | throw new ArgumentNullException("element"); | |
8 | } | |
9 | ||
10 | return (bool?)element.GetValue(IsFocusedProperty); | |
11 | } | |
12 | ||
13 | public static void SetIsFocused(DependencyObject element, bool? value) | |
14 | { | |
15 | if (element == null) { | |
16 | throw new ArgumentNullException("element"); | |
17 | } | |
18 | ||
19 | element.SetValue(IsFocusedProperty, value); | |
20 | } | |
21 | ||
22 | private static void IsFocusedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) | |
23 | { | |
24 | object fe = (FrameworkElement)d; | |
25 | ||
26 | if (e.OldValue == null) { | |
27 | fe.GotFocus += FrameworkElement_GotFocus; | |
28 | fe.LostFocus += FrameworkElement_LostFocus; | |
29 | } | |
30 | ||
31 | if ((bool)e.NewValue) { | |
32 | fe.Focus(); | |
33 | } | |
34 | } | |
35 | ||
36 | private static void FrameworkElement_GotFocus(object sender, RoutedEventArgs e) | |
37 | { | |
38 | ((FrameworkElement)sender).SetValue(IsFocusedProperty, true); | |
39 | } | |
40 | ||
41 | private static void FrameworkElement_LostFocus(object sender, RoutedEventArgs e) | |
42 | { | |
43 | ((FrameworkElement)sender).SetValue(IsFocusedProperty, false); | |
44 | } | |
45 | } |