2017-10-17 2 views
0

PageRenderer 사용에 문제가 있습니다.Xamarin Forms UWP PageRenderer

MainPage.xml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
       x:Class="abc.CustomView"> 
    <ContentPage.Content> 
      <StackLayout> 
       <Button Text="scann" Clicked="BtnScannClicked"></Button> 
      </StackLayout> 
    </ContentPage.Content> 

MainPage.cs

async void BtnScannClicked(object sender, EventArgs e) 
     { 
      await Navigation.PushAsync(new CustomView()); 
     } 

CustomView.Xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="abc.CustomView"> 
    <ContentPage.Content> 
    </ContentPage.Content> 
</ContentPage> 

CustomView.cs

[XamlCompilation(XamlCompilationOptions.Compile)] 
    public partial class CustomView : ContentPage 
    { 
     public CustomView() 
     { 
      InitializeComponent(); 
     } 
    } 
,174 (내 인 CustomRenderer입니다)

DemoPage.cs

[assembly: ExportRenderer(typeof(CustomView), typeof(DemoPage))] 
namespace abc.UWP 
{ 
    class DemoPage: PageRenderer 
    { 
     Page page; 
     Application app; 


     protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Page> e) 
     { 
      base.OnElementChanged(e); 

      if (e.OldElement != null || Element == null) 
      { 
       return; 
      } 
      try 
      { 
       app = Application.Current; 

       SetupUserInterface(); 
       this.Children.Add(page); 
      } 
      catch (Exception ex) 
      { 
       Debug.WriteLine(@"  ERROR: ", ex.Message); 
      } 
     } 


     void SetupUserInterface() 
     { 
      var stackPanel = new StackPanel(); 
      page = new Page(); 
      page.Content = stackPanel; 
     } 
    } 
} 

예외 던져 항상있다 : 빌드하는 동안 Xamarin.Forms.Platform.UAP.dll 오류 'System.InvalidOperationException'가.

하지만 이것이 실제로 PageRenderer에 문제가되지는 않는다고 생각합니다. 이것이 ClickEvent 중에 나타나는 것으로 보입니다.

+0

ok, 문제는 PushModalAsync 대신 Navigation.PushAnsync를 사용하는 것이 었습니다. 이제 내비게이션 파트가 작동하는 것 같습니다 (내 DemoPage.cs의 exportRenderer 어셈블리 없이는). 내 응용 프로그램은 DemoPage.cs 탐색 후 항상 충돌 (종료 코드 -1이 있음)됩니다. 구현은 괜찮은지 아닌지 여부 – flix

답변

0

예외가 발생합니다. 빌드하는 동안 Xamarin.Forms.Platform.UAP.dll 오류에서 'System.InvalidOperationException'이 발생합니다.

MainPageNavigationPage에 추가하지 않은 것이 문제입니다. PushAsync 메서드는 Windows에서 전 세계적으로 지원되지 않습니다. app.xaml.cs 파일에 다음 코드를 추가하여 문제를 해결할 수 있습니다.

public App() 
{ 
    InitializeComponent(); 
    var RootNav = new NavigationPage(new MainPage()); 
    MainPage = RootNav; 
} 

PushModalAsync - 모달 컨텍스트로 페이지를 밀어 넣습니다. 이렇게하면 응용 프로그램 내에서 새롭고 독립적 인 탐색 컨텍스트가 만들어집니다. 생성 된 모달은 하드웨어 백 버튼으로 닫을 수 있습니다. 이 기능을 중지 할 수있는 방법이 없습니다.

따라서 PushModalAsync 메서드는 NavigationPage에 의존하지 않으므로 현재 시나리오에서 작동합니다.

넣어주세요 내 응용 프로그램은 DemoPage.cs를 탐색 한 후에 항상 종료됩니다 (종료 코드 -1이 있음). 구현은 괜찮은가? 그렇지 않은가?

PageRenderer에 ArrangeOverride 메서드가 구현되지 않은 것으로 나타났습니다. 그리고 당신은 페이지의 내용을 보지 못할 것입니다.