2017-03-27 1 views
0

Problem

Dies ist das Layout meiner Hauptfenster ist:Probleme mit Anzeige des Kindes Seite bei der Verwendung von Frames

<Page 
    x:Class="Communities.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:Communities" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" Loaded="Page_Loaded" DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="48" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="auto" /> 
     </Grid.RowDefinitions> 
     ... 
     <SplitView Grid.Row="1" Name="hamburgerMenu" OpenPaneLength="200" PaneBackground="#F02A2A2A"> 
      <SplitView.Pane> 
       <ListView ItemsSource="{Binding}" IsItemClickEnabled="True" ItemClick="HamburgerItemClick"> 
...    </ListView> 
      </SplitView.Pane> 
      <Frame Name="frame" /> 
     </SplitView> 
     <Grid Grid.RowSpan="3" Name="popupArea" /> 
    </Grid> 
</Page> 

die frame ist, wo ich alle meine Seiten zu laden, so dass das Layout immer consistant ist.

Nun, in den meisten meiner geordneten Seiten habe ich AppBar Kontrolle definiert und an die BottomAppBar Eigenschaft des Kindes Seite angehängt:

PostView.xaml

... 
<Page.BottomAppBar> 
    <CommandBar> 
     <AppBarButton Label="Back" Icon="Back" Click="TryGoBack" /> 
     <AppBarButton Label="Refresh" Icon="Refresh" Click="TryRefreshComments" /> 
     <AppBarButton Label="Go to Community" Icon="Go" Click="TryOpenCommunity" /> 
    </CommandBar> 
</Page.BottomAppBar> 
... 

Hier ist, wo die Ärger beginnt. Es funktioniert gut auf dem PC, da das Layout auf dem Desktop größtenteils statisch ist. Es gibt keine Software-Tastaturen die meiste Zeit usw. erforderlich Auf mobilen es problematischer: Screenshots

Meine Gedanken

Es scheint, wie der Rahmen, der das Kind Seite anzuzeigen verwendet wird, wird alle möglichen Probleme verursachen. Wenn die AppBar auf der Hauptseite definiert ist, wird sie korrekt positioniert.

Ich möchte die Tastatur vermeiden, die die Textbox sowie die AppBar abdeckt, aber ich möchte nicht die frame Steuerung loswerden. Ich würde es auch bevorzugen, wenn die Seite "zerquetscht" wird, wenn die Tastatur angezeigt wird, anstatt nach oben gedrückt zu werden, aber ich bin mir nicht sicher, wie die Tastatur auf dem frame Level angezeigt wird, anstelle des gesamten MainPage Standardniveaus.

Was wäre der beste Weg, um diese Situation zu lösen?

Prost!

Antwort

0

Wie Sie wissen, wenn wir die Page.BottomAppBar im Stammverzeichnis der Seite setzen, gibt es kein Problem mit Touch-Tastatur. Es scheint, es ist der beste Weg, die Page.BottomAppBar hinzuzufügen. Wenn Sie die Page.BottomAppBar auf der anderen Seite in der Frame hinzufügen möchten, sollten Sie Ihre Benutzeroberfläche anpassen können. Die UWP bietet ein ähnliches Verhalten hinsichtlich des Aussehens der Berührungstastatur durch Behandeln der Showing und Hiding Ereignisse, die durch das InputPane Objekt offengelegt werden.

Wir können die InputPaneVisibilityEventArgs.OccludedRect verwenden, um die Region des Anwendungsfensters abzurufen, die das Eingabefenster abdeckt.

Zum Beispiel:

public PostView() 
{ 
    this.InitializeComponent(); 
    InputPane.GetForCurrentView().Showing += PostView_Showing; 
    InputPane.GetForCurrentView().Hiding += PostView_Hiding; 
} 

private void PostView_Hiding(InputPane sender, InputPaneVisibilityEventArgs args) 
{ 
    MyTextBox.Margin = new Thickness(0, args.OccludedRect.Height, 0, 0); 
} 

private void PostView_Showing(InputPane sender, InputPaneVisibilityEventArgs args) 
{ 
    MyTextBox.Margin = new Thickness(0, 0, 0, args.OccludedRect.Height); 
} 
Verwandte Themen