bovender framework
C# framework that implements MVVM and more
FocusFirstBehavior.cs
1 /* FocusFirstBehavior.cs
2  * part of Bovender framework
3  *
4  * Copyright 2014-2018 Daniel Kraus
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18 using System;
19 using System.Collections.Generic;
20 using System.Linq;
21 using System.Text;
22 using System.Windows;
23 using System.Windows.Controls;
24 using System.Windows.Input;
25 
26 namespace Bovender.Mvvm.Behaviors
27 {
35  public static class FocusBehavior
36  {
37  public static readonly DependencyProperty FocusFirstProperty =
38  DependencyProperty.RegisterAttached(
39  "FocusFirst",
40  typeof(bool),
41  typeof(FocusBehavior),
42  new PropertyMetadata(false, OnFocusFirstPropertyChanged));
43 
44  public static bool GetFocusFirst(Control control)
45  {
46  return (bool)control.GetValue(FocusFirstProperty);
47  }
48 
49  public static void SetFocusFirst(Control control, bool value)
50  {
51  control.SetValue(FocusFirstProperty, value);
52  }
53 
54  static void OnFocusFirstPropertyChanged(
55  DependencyObject obj, DependencyPropertyChangedEventArgs args)
56  {
57  Control control = obj as Control;
58  if (control == null || !(args.NewValue is bool))
59  {
60  return;
61  }
62 
63  if ((bool)args.NewValue)
64  {
65  control.Loaded += (sender, e) =>
66  control.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
67  }
68  }
69  }
70 }
Focuses the first control in a window.