C# UnitTest中的Keyboard.FocusedElement为空

C# UnitTest中的Keyboard.FocusedElement为空,c#,wpf,unit-testing,C#,Wpf,Unit Testing,我试图通过以下方式设置wpf控件的焦点: [TestClass] [TestFixture, Apartment(ApartmentState.STA)] public class OnEnter_MoveFocus_Test { [TestInitialize] public void TestInitialize() { if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA

我试图通过以下方式设置wpf控件的焦点:

[TestClass]
[TestFixture, Apartment(ApartmentState.STA)]
public class OnEnter_MoveFocus_Test
{
    [TestInitialize]
    public void TestInitialize()
    {
        if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
        {
            throw new ThreadStateException("The current threads apartment state is not STA");
        }
    }
    [TestMethod]
    public void TestMoveFocus()
    {
        TextBox TextBox1 = new TextBox() { Name = nameof(TextBox1), Focusable=true };
        var result = TextBox1.Focus(); //results in false
        Keyboard.Focus(TextBox1);
    }
}
TextBox1.Focus()
返回false(显然
TextBox1
可聚焦并启用),并且在使用
键盘时返回Focus(TextBox1)
键盘。FocusedElement仍为
null


如何解决此问题?

您创建的
文本框不属于任何可视树,无法由
焦点管理器管理。所以很明显这是行不通的。您必须首先将
文本框添加到可见的容器中。您不能在典型的单元测试中执行这些类型的UI测试。查看TestStack中的白色框架(有一个用于此的组),了解执行此类测试的方法。您创建的
TextBox
不属于任何可视树,无法由
FocusManager
管理。所以很明显这是行不通的。您必须首先将
文本框添加到可见的容器中。您不能在典型的单元测试中执行这些类型的UI测试。看一下TestStack中的白色框架(有一个组用于此),了解执行此类测试的方法。