2016-06-15 11 views
1

Ich versuche, eine Schaltfläche zur Titelleiste hinzuzufügen. Meine XAML sieht wie folgt aus:Windows 10 Univeral App - Schaltfläche in der Titelleiste funktioniert nicht

<Page 
    x:Class="FullScreen.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:FullScreen" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d"> 

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <Grid x:Name="TitleBar"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="Application Name" VerticalAlignment="Center"/> 
       <Button Grid.Column="1" Content="Test" Click="Button_Click"/> 
      </Grid> 
     </Grid> 

     <Grid Grid.Row="1"> 
      <TextBlock>Content</TextBlock> 
     </Grid> 
    </Grid> 
</Page> 

Die CS- Seite hat diesen Code:

using System; 
using Windows.ApplicationModel.Core; 
using Windows.UI.Popups; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 

namespace FullScreen 
{ 
    public sealed partial class MainPage : Page 
    { 
     public MainPage() 
     { 
      InitializeComponent(); 

      CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true; 
      Window.Current.SetTitleBar(TitleBar); 
     } 

     private async void Button_Click(object sender, RoutedEventArgs e) 
     { 
      await new MessageDialog("Click!").ShowAsync(); 
     } 
    } 
} 

Die Schaltfläche zeigt, aber es reagiert nicht auf das Click-Ereignis. Wenn ich die beiden Linien im Konstruktor auf Kommentar:

public MainPage() 
{ 
    InitializeComponent(); 

    //CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true; 
    //Window.Current.SetTitleBar(TitleBar); 
} 

Die Taste ist in dem Hauptkörper der App und das Click-Ereignis korrekt funktioniert. Was vermisse ich?

Thanx,

Antwort

6

Ich versuche, eine Schaltfläche, um die Titelleiste hinzuzufügen. Die Schaltfläche wird angezeigt, reagiert jedoch nicht auf das Klickereignis.

Laut der offiziellen Dokumentation (Bemerkungen Teil von Window.SetTitleBar), ist dieses Verhalten von Entwurf.

Eingang
Wenn Sie diese Methode aufrufen, eine XAML UIElement als der Titelleiste zu setzen, lässt es Windows-Handle Eingabe in die Titelleiste UIElement die gleiche Art und Weise es Eingang in die Standard-Systemtitelleiste verarbeitet. Beispielsweise kann ein Benutzer das Fenster verschieben, indem er das XAML-UIElement zieht, oder das Kontextmenü des Fensters aufrufen, indem er mit der rechten Maustaste darauf klickt.
Das bedeutet, dass Ihre App nicht mehr die Zeigereingabe empfängt, wenn der Benutzer mit dem Ziel UIElement oder seinen Kindern mithilfe von Berührung, Maus oder Stift interagiert. Sie müssen jedoch immer noch behandeln (oder zu verhindern) Tastatureingabe, und bestimmen, ob Inhalt in der Titelleiste Fokus erhalten, indem Sie mit der Tastatur mit der Tastatur ein Tab.

Um die Schaltfläche in der Titelleiste, um auf das Click-Ereignis zu reagieren, können wir zuerst ein Rechteck für die Customizing Titelleiste in XAML Seite hinzufügen:

<Grid x:Name="TitleBar"> 
    <!--Add a rectangle here--> 
    <Rectangle x:Name="BackgroundElement" /> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0" Text="Application Name" VerticalAlignment="Center" /> 
     <Button Grid.Column="1" Content="Test" Click="Button_Click" /> 
    </Grid> 
</Grid> 

Dann die Titelleiste auf das Rechteck gesetzt anstelle des gesamten Gitters in Code hinter:

public MainPage() 
{ 
    InitializeComponent(); 

    CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true; 
    // Set TitleBar to BackgroundElement instead of the entire grid 
    // Clicks on the BackgroundElement will be treated as clicks on the title bar. 
    Window.Current.SetTitleBar(BackgroundElement); 
} 

Dies ist die offizielle Title bar sample für Ihre Referenz, und folgende ist die Ausgabe für den Testcode oben: enter image description here

Verwandte Themen