WPF WindowsAPICodePack ExplorerBrowser停止标签

时间:2015-05-20 16:58:05

标签: c# wpf windows-api-code-pack

我搜索了尽可能多的搜索方式,我没有看到有人提到这个问题。也许我做错了?

如果我在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键不再有效,除非我点击控件。

项目中的其他窗口也是如此。如果我要打开一个包含控件的对话框,让它导航,然后关闭窗口而不单击控件。现在整个应用程序的标签都已断开。

关于要改变什么或解决问题的方法的任何建议都会很棒。任何不像移动鼠标光标并以编程方式单击它的任何东西(是的,我尝试过,是的确有效)。

0 个答案:

没有答案