Browse Source

Make keyboard focus work again.

pull/4/head
Steven Kirk 12 years ago
parent
commit
c761f8830d
  1. 8
      Perspex.Input/FocusManager.cs
  2. 2
      Perspex.Input/IKeyboardDevice.cs
  3. 19
      Perspex.Input/KeyboardDevice.cs
  4. 2
      Perspex.Interactivity/Interactive.cs
  5. 3
      Perspex.Windows/WindowsPlatform.cs

8
Perspex.Input/FocusManager.cs

@ -7,6 +7,7 @@
namespace Perspex.Input
{
using Perspex.Interactivity;
using Splat;
public class FocusManager : IFocusManager
{
@ -33,6 +34,13 @@ namespace Perspex.Input
this.Current = control;
IKeyboardDevice keyboard = Locator.Current.GetService<IKeyboardDevice>();
if (keyboard != null)
{
keyboard.FocusedElement = control;
}
if (next != null)
{
next.RaiseEvent(new RoutedEventArgs

2
Perspex.Input/IKeyboardDevice.cs

@ -28,6 +28,8 @@ namespace Perspex.Input
public interface IKeyboardDevice : IInputDevice
{
IInputElement FocusedElement { get; set; }
ModifierKeys Modifiers { get; }
}
}

19
Perspex.Input/KeyboardDevice.cs

@ -35,7 +35,7 @@ namespace Perspex.Input
public IInputElement FocusedElement
{
get;
protected set;
set;
}
public abstract ModifierKeys Modifiers { get; }
@ -49,7 +49,7 @@ namespace Perspex.Input
switch (e.Type)
{
case RawKeyEventType.KeyDown:
element.RaiseEvent(new KeyEventArgs
KeyEventArgs ev = new KeyEventArgs
{
RoutedEvent = InputElement.PreviewKeyDownEvent,
Device = this,
@ -57,16 +57,11 @@ namespace Perspex.Input
Text = e.Text,
Source = element,
OriginalSource = element,
});
element.RaiseEvent(new KeyEventArgs
{
RoutedEvent = InputElement.KeyDownEvent,
Device = this,
Key = e.Key,
Text = e.Text,
Source = element,
OriginalSource = element,
});
};
element.RaiseEvent(ev); ;
ev.RoutedEvent = InputElement.KeyDownEvent;
element.RaiseEvent(ev); ;
break;
}
}

2
Perspex.Interactivity/Interactive.cs

@ -59,7 +59,7 @@ namespace Perspex.Interactivity
{
Contract.Requires<NullReferenceException>(e != null);
if (e.RoutedEvent != null)
if (!e.Handled)
{
switch (e.RoutedEvent.RoutingStrategy)
{

3
Perspex.Windows/WindowsPlatform.cs

@ -8,8 +8,10 @@ namespace Perspex.Windows
{
using System;
using System.Collections.Generic;
using Perspex.Input;
using Perspex.Platform;
using Perspex.Threading;
using Perspex.Windows.Input;
using Perspex.Windows.Interop;
using Perspex.Windows.Threading;
using Splat;
@ -24,6 +26,7 @@ namespace Perspex.Windows
public static void Initialize()
{
var locator = Locator.CurrentMutable;
locator.Register(() => WindowsKeyboardDevice.Instance, typeof(IKeyboardDevice));
locator.Register(() => instance, typeof(IPlatformThreadingInterface));
}

Loading…
Cancel
Save