Родные представления Frame не позволяют идти назад
Среда
react-native -v
: 0.55.0npm ls rnpm-plugin-windows
: 0.2.8npm ls react-native-windows
: 0.55.0-rc.0node -v
: 8.11.3npm -v
: 5.6.0yarn --version
: 1.7.0Целевая платформа: UWP
- Версия (ы) целевой платформы:10.0.14393.0
- Целевое устройство (устройства): Настольный компьютер
- Разработка операционной системы: Windows 10 Desktop
- Visual Studio Версия: 2017
- Конфигурация сборки: отладка (но все равно для этой проблемы)
Действия по воспроизведению
- Установите свежее реагирующее приложение
- Установите ответные нативные окна (как в Приступая к работе)
- затем откройте решение в VS и создайте новый собственный модуль в ReactNative/Views/Radaee/RadaeeManager.cs
- Импортируйте внешнюю библиотеку RadaeePdf (это библиотека для редактирования pdf в собственном приложении, вы можете найти ее на их веб-сайте)
- Ссылка Radaee на ваше приложение
RadaeeManager.cs
class RadaeeManager : SimpleViewManager<MainPage>
{
public MainPage _mainPage;
public override string Name
{
get
{
return "RCTRadaeeView";
}
}
public RadaeeManager()
{
_mainPage = new MainPage();
}
protected override MainPage CreateViewInstance(ThemedReactContext reactContext)
{
return _mainPage;
}
}
MainPage.xaml.cs
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
async private void BrowsFile(Object sender, RoutedEventArgs e)
{
FileOpenPicker filePicker;
filePicker = new FileOpenPicker();
filePicker.ViewMode = PickerViewMode.List;
filePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
filePicker.FileTypeFilter.Add(".PDF");
filePicker.FileTypeFilter.Add(".pdf");
StorageFile file = await filePicker.PickSingleFileAsync();
if (file != null)
{
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite);
if (stream != null)
{
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.Navigate(typeof(PDFReaderPage), stream);
}
}
}
}
PDFReaderPage.xaml.cs
public sealed partial class PDFReaderPage : Page, PDFView.PDFViewListener
{
IRandomAccessStream m_stream;
public PDFReaderPage()
{
this.InitializeComponent();
Windows.UI.Core.CoreWindow rcWindow = Window.Current.CoreWindow;
Rect rcScreen = rcWindow.Bounds;
mPDFView.Width = rcScreen.Width;
mPDFView.Height = rcScreen.Height;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
m_stream = (IRandomAccessStream)e.Parameter;
m_doc = new PDFDoc();
PDF_ERROR err = m_doc.Open(m_stream, "");
switch (err)
{
case PDF_ERROR.err_ok:
m_view = new PDFViewVert(mPDFView);
m_view.vOpen(m_doc, 4, 0xFFCCCCCC, this);
initOptionPanels();
break;
case PDF_ERROR.err_password:
break;
default:
break;
}
}
}
С этим кодом я не могу вернуться к своему приложению реакции. Но если я не использую Frame.Navigate, я могу вернуться, но взаимодействие с pdf нарушено. см. ниже RadaeeManager.cs
class RadaeeManager : SimpleViewManager<PDFReaderPage>
{
public PDFReaderPage _mainPage;
public override string Name
{
get
{
return "RCTRadaeeView";
}
}
public RadaeeManager()
{
_mainPage = new PDFReaderPage();
}
protected override PDFReaderPage CreateViewInstance(ThemedReactContext reactContext)
{
return _mainPage;
}
}
PDFReaderPage.xaml.cs
public sealed partial class PDFReaderPage : Page, PDFView.PDFViewListener
{
IRandomAccessStream m_stream;
public PDFReaderPage()
{
this.InitializeComponent();
Windows.UI.Core.CoreWindow rcWindow = Window.Current.CoreWindow;
Rect rcScreen = rcWindow.Bounds;
mPDFView.Width = rcScreen.Width;
mPDFView.Height = rcScreen.Height;
openFile();
}
protected override void openFile(NavigationEventArgs e)
{
ApplicationData data = ApplicationData.Current;
StorageFile file = await data.LocalCacheFolder.GetFileAsync("pdf.pdf");
m_stream = await file.OpenAsync(FileAccessMode.ReadWrite); m_doc = new PDFDoc();
m_stream = (IRandomAccessStream)e.Parameter;
m_doc = new PDFDoc();
PDF_ERROR err = m_doc.Open(m_stream, "");
switch (err)
{
case PDF_ERROR.err_ok:
m_view = new PDFViewVert(mPDFView);
m_view.vOpen(m_doc, 4, 0xFFCCCCCC, this);
initOptionPanels();
break;
case PDF_ERROR.err_password:
break;
default:
break;
}
}
}
Это способ, которым я могу заставить Radaee работать отлично, но я не могу вернуться к своему приложению.
Ожидаемое поведение
Мне нужно открыть собственный вид для редактирования PDF, а затем мне нужно вернуться в свое приложение
Фактическое поведение
Если я открою свою страницу radaee с помощью Frame.Navigate, я не смогу вернуться к своему приложению реакции. Но если я открою свою страницу radaee простым возвратом, я не смогу правильно использовать плагин.
Спасибо за вашу помощь!