WPF MoveFocus()在Vista上工作,而不是XP

时间:2009-09-22 16:51:29

标签: c# .net wpf windows-vista windows-xp

下面的代码可以按预期在Vista上运行(焦点从ListView向下移动),但在XP SP3上(两者都有.Net 3.5 SP1),它只在ListView的前两项之间移动。

if (myListView.SelectedItem != null) {
    IInputElement orig = FocusManager.GetFocusedElement(this);
    FocusManager.SetFocusedElement(this, myListView);
    ListViewItem lvi = myListView.ItemContainerGenerator.ContainerFromItem(myListView.SelectedItem) as ListViewItem;
    TraversalRequest down = new TraversalRequest(FocusNavigationDirection.Down);

    Boolean result = lvi.MoveFocus(down);
    Console.WriteLine(result.ToString());
    FocusManager.SetFocusedElement(this, orig);
}

当焦点在文本框中时,我从窗口的previewkeydown事件中调用此代码。我现在正在深入研究框架,尝试在MoveFocus()中找到XP和Vista之间的不同之处。我觉得我正在再次进行Web开发,测试浏览器的怪癖......

3 个答案:

答案 0 :(得分:1)

您是否在文档中运行Windows XP Service Pack2,要求是:Windows 7,Windows Vista,Windows XP SP2,Windows Server 2008 R2,Windows Server 2008,Windows Server 2003

Msdn doc

对我来说,我在XP下开发WPF应用程序并且一切正常......

答案 1 :(得分:0)

我的一般感觉是WPF中的许多功能都使用Vista中的新技术,而XP中则不支持。我经历的事情主要与视觉效果有关,但在你的情况下,它显然是别的东西。

我的初步想法是,在Vista中有一些新的Windows消息在XP中不起作用。

答案 2 :(得分:0)

XP SP2满足VS2008的要求,WPF最适合Windows Vista / Windows 7,可能就是这种情况。