我搜索了尽可能多的搜索方式,我没有看到有人提到这个问题。也许我做错了?
如果我在WPF窗口中放置来自Windows API代码包的ExplorerBrowser控件并调用Navigate(),那么在导航完成后,通过控件进行选项卡不起作用。解决此问题的唯一方法是实际单击浏览器控件内部。注释掉Navigate调用也会阻止它发生,但会留下无用的控件。
控件的最简单使用证明了这个问题。
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WindowsPresentationFoundation="clr-namespace:Microsoft.WindowsAPICodePack.Controls.WindowsPresentationFoundation;assembly=Microsoft.WindowsAPICodePack.Shell"
Title="MainWindow" Height="600" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBox Name="box1" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="10,25,10,0" TabIndex="100"/>
<TextBox Name="box2" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="10,65,10,0" TabIndex="101"/>
<TextBox Name="box3" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="10,105,10,0" TabIndex="102"/>
<TextBox Name="box4" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="10,145,10,0" TabIndex="103"/>
<WindowsPresentationFoundation:ExplorerBrowser Grid.Column="1" Grid.Row="0" Name="aBrowser" Margin="5,2,5,5" TabIndex="200"/>
</Grid>
和
using Microsoft.WindowsAPICodePack.Shell;
using System;
using System.Windows;
namespace TestApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
string strPath = "C:\\test\\";
ShellObject folder = ShellObject.FromParsingName(strPath);
aBrowser.ExplorerBrowserControl.Navigate(folder);
}
}
}
编译并启动,标签不起作用。单击浏览器控件内部,它将再次开始工作。
仅当Navigate()完成时才会出现此问题。您可以通过将浏览器控件放在选项卡控件中来查看。
<TabControl Grid.Column="1">
<TabItem/>
<TabItem>
<WindowsPresentationFoundation:ExplorerBrowser Grid.Column="1" Grid.Row="0" Name="aBrowser" Margin="5,2,5,5" TabIndex="200"/>
</TabItem>
</TabControl>
添加到MainWindow()
aBrowser.NavigationLog.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(FileNavComplete);
处理它的功能
public void FileNavComplete(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{ MessageBox.Show("Navigation complete"); }
现在,当我编译并启动Tab键工作时,直到我单击选项卡将控件置于前台。弹出消息框,显示Navigate()实际上没有触发,直到控件可见,现在Tab键不再有效,除非我点击控件。
项目中的其他窗口也是如此。如果我要打开一个包含控件的对话框,让它导航,然后关闭窗口而不单击控件。现在整个应用程序的标签都已断开。
关于要改变什么或解决问题的方法的任何建议都会很棒。任何不像移动鼠标光标并以编程方式单击它的任何东西(是的,我尝试过,是的确有效)。