我正在尝试对WPF控件进行单元测试,并且需要模拟按键按下。我已经看到了一个可能的解决方案here,但是当我尝试传入PresentationSource时,我不断获取一个空值(从PresentationSource.FromVisual()或PresentationSource.FromDependencyObject()),该值会触发异常。

我的问题是如何获得可以在单元测试中使用的非null PresentationSource?

最佳答案

您可以像这样扩展PresentationSource类:

public class FakePresentationSource : PresentationSource
{
    protected override CompositionTarget GetCompositionTargetCore()
    {
        return null;
    }

    public override Visual RootVisual { get; set; }

    public override bool IsDisposed { get { return false; } }
}

并像这样使用它:
var uiElement = new UIElement();

uiElement.RaiseEvent(new KeyEventArgs(Keyboard.PrimaryDevice, new FakePresentationSource(), 0, Key.Delete)
{
    RoutedEvent = UIElement.KeyDownEvent
});

07-24 09:22