Недавно я попытался внедрить файл PowerPoint в качестве XpsDocument в WPF.
Это простое приложение WPF, в котором я встраиваю свойство DocumentViewer в мое главное окно.XAML сетка:
<Window x_Class="PowerPoint2.MainWindow"
mc_Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DocumentViewer
Name="DocumentviewPowerPoint"
VerticalAlignment="Top"
HorizontalAlignment="Left" />
</Grid>
Чтобы создать документ, привязанный к «DocumentviewPowerPoint» я преобразую файл PowerPoint, который был открыт в формат Xps и привязать эту переменную к свойству XAML, упомянутому ранее:
using System;
using System.IO;
using System.Windows;
using System.Windows.Xps.Packaging;
using Microsoft.Office.Core;
using Microsoft.Office.Interop.PowerPoint;
using Application = Microsoft.Office.Interop.PowerPoint.Application;
namespace PowerPoint2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
const string powerPointFile = @"c:tempppt.pptx";
var xpsFile = Path.GetTempPath() + Guid.NewGuid() + ".pptx";
var xpsDocument = ConvertPowerPointToXps(powerPointFile, xpsFile);
DocumentviewPowerPoint.Document = xpsDocument.GetFixedDocumentSequence();
}
private static XpsDocument ConvertPowerPointToXps(string pptFilename, string xpsFilename)
{
var pptApp = new Application();
var presentation = pptApp.Presentations.Open(pptFilename, MsoTriState.msoTrue, MsoTriState.msoFalse,
MsoTriState.msoFalse);
try
{
presentation.ExportAsFixedFormat(xpsFilename, PpFixedFormatType.ppFixedFormatTypeXPS);
}
catch (Exception ex)
{
MessageBox.Show("Failed to export to XPS format: " + ex);
}
finally
{
presentation.Close();
pptApp.Quit();
}
return new XpsDocument(xpsFilename, FileAccess.Read);
}
}
}
Это все работает достаточно хорошо при запуске программы, показывая документ Xps, встроенный в WPF:
Мой вопрос заключается в том, как я могу дополнительно изменить свой код для того, чтобы отобразить PowerPoint не только как серию прокручиваемых слайдов, как показано на рисунке, но и как фактическое слайд-шоу ? Я хотел бы сделать дальнейшие обновления, чтобы позволить пользователю перейти к следующему слайду при каждом щелчке мыши-как «правильная» презентация. Моя проблема заключается в том, что я не знаком с использованием API XpsDocument — я не знаю, является ли это случаем использования их для достижения того, что я хочу, или это в свойствах параметров переменной представления, которая преобразуется в формат Xps.
Мне удалось решить интересующую меня проблему.
Пожалуйста, обратитесь к этой публикации в блоге для получения подробного объяснения:
Управление методами и свойствами DocumentViewer с помощью MVVM
Решение решает проблему возможности разрешить отдельные слайды PowerPoint (преобразованные в формат файла xps), чтобы занять все доступное пространство windows, вызывая соответствующую комбинацию
DocumentViewer
методов.При нажатии кнопки screen для вызова RelayCommand следующая комбинация вызовов API DocumentViewer в MainWindowViewModel.наблюдалась работа класса cs:
И получить сам
DocumentViewer
экземпляр? Мне также нужно обновить главное окно.код XAML.cs, чтобы получить его, чтобы вернуть экземпляр объекта DocumentViewer:пространство имен DocumentView
{
открытый частичный класс MainWindow
{
частный статический DocumentViewer _docViewer;
}
}
Где
DocumentViewPowerPoint
имя, данное DocumentViewer в главном окне.код XAML: