2012-01-25 4 views
0

Используемый код Я нашел на SO, чтобы использовать Acrobat Reader на базе COM для отображения PDF через хостинг в WindowsFormsHost.Показать PDF Делает фокус и питается Горячий ключ

Он отображает PDF-файл. Две проблемы:

  • Когда я загружаю PDF управления AxAcroPDFLib.AxAcroPDF принимает фокус

    Я хочу сосредоточиться, чтобы остаться на ранее

  • Когда AxAcroPDFLib.AxAcroPDF имеет фокус его съедает Горячий Ключ (N)

    Клавиша ALT даже не подчеркивает N. Даже если пользователь выбирает AxAcroPDFLib.AxAcroPDF, я бы хотел, чтобы горячие клавиши работали.

Я понимаю, что это COM и Adobe в WPF, и может не быть ответа. Если есть бесплатный или дешевый элемент управления WPF для просмотра PDF, я был бы рад пойти по этому пути. Это для коммерческого применения, поэтому оно должно быть бесплатным (или дешевым) для коммерческого использования.

<Button Click="Button_Click">_Next</Button>  

<WindowsFormsHost Name="windowsFormsHost1" Margin="1" /> 
UserControl1 UC = new UserControl1(@"C:\temp\1000001.pdf"); 
this.windowsFormsHost1.Child = UC; 


public UserControl1(string filename) 
{ 
    InitializeComponent(); 
    this.axAcroPDF1.LoadFile(filename); 
} 

Это делает дисплей PDF. В приложении для производства я показываю различные PDF-файлы на основе используемых действий.

+3

Acrobat Reader использует неприятный взломанный элемент управления, фактически это окно, принадлежащее другому процессу (AcroRd32.exe). У этого есть все виды побочных эффектов, есть нажатия клавиш - только один из них. Не уверен, что это имеет значение, пользователи знакомы с неприятностями со стороны Adobe. –

+0

О да, я боюсь, что Adobe не играет хорошо даже в COM, и это COM в WPF. Даже ключевое событие down на windowsFormsHost1 не срабатывает. XPS хорошо играет. Я бы конвертировал в XPS на лету, но это для приложения поддержки судебных процессов, и из-за цепочки поставок я должен отобразить pdf-файл. Я мог бы просто запустить собственный процесс, чтобы проблемы были внешними, но это все еще проблематично и разрозненный интерфейс. – Paparazzi

+0

Готовы ли вы рассмотреть другие сторонние компоненты просмотра PDF-файлов? – Reddog

ответ

0

Что сказал Ганс. Кажется, что Acrobat ест ключевые штрихи, и я ничего не могу с этим поделать.

1

Не знаю, удовлетворяет ли кто-либо, кто это читает: я нашел способ обойти мою версию этой проблемы (получил текстовое поле для ввода и хочу, чтобы он восстановил фокус после загрузки PDF с помощью AxAcroPDFLib.AxAcroPDF).

Мое решение было это:

 private void returnFocus(object sender, EventArgs e) 
    { 
     textBox.Focus(); 
    } 

     this.textBox.LostFocus += new System.EventHandler(this.returnFocus); 

Работы для меня!

0

Я работал над этим, включив управление AxAcroPDF в панели и отключив его. Мышь подключена, чтобы проверить, введен ли она в прямоугольник панели, и в этом случае панель разрешена, позволяя пользователю взаимодействовать с элементом управления AxAcroPDF.

Example code posted here

+1

Пожалуйста, добавьте код для ответа – Ram

0

мой взломан решение для борьбы с этим добавить задержку перед включением панели. Очевидно, что вы хотите добавить минимальную задержку, но слишком мало, и с неправильным файлом она снова закроет фокус.

System.Threading.Thread.Sleep(300) 
    Panel1.Enabled = True