我已经以尽可能多的方式进行搜索,但我还没有看到有人提到这个问题。也许我做错了?
如果我将 Windows API 代码包中的 ExplorerBrowser 控件放置在 WPF 窗口中并调用 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);
}
}
}
编译并启动,tab 不起作用。单击浏览器控件内部,它会再次开始工作。
该问题仅在 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>
添加到主窗口()
aBrowser.NavigationLog.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(FileNavComplete);
处理它的函数
public void FileNavComplete(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{ MessageBox.Show("Navigation complete"); }
现在,当我编译并启动选项卡工作时,直到我单击选项卡以将控件置于前台。消息框弹出,显示 Navigate() 在控件可见之前实际上不会触发,现在选项卡不再起作用,除非我单击控件。
对于项目中的其他窗口也是如此。如果我要打开一个包含控件的对话框,让它导航,然后关闭窗口而不单击控件。现在整个应用程序的制表符都被破坏了。
任何关于改变什么或解决问题的方法的建议都会很棒。任何比移动鼠标光标并以编程方式单击它更简单的东西(是的,我试过了,是的,它可以工作。)。