0

Standardmäßig PickerFlyout hat commandbar, die Schaltflächen getan und abbrechen hat. Ist es möglich, die Schaltfläche "Fertig" programmatisch zu deaktivieren? Wenn nicht, gibt es eine Möglichkeit, eine benutzerdefinierte Befehlsleiste hinzuzufügen und die Standard-Befehlsleiste zu ersetzen?Benutzerdefinierte CommandBar zu PickerFlyout

Mit Hilfe der Antwort habe ich versucht, benutzerdefinierte Picker von PickerFlyoutBase zu schreiben. Aber jetzt bin ich nicht in der Lage, Inhalt zum Flyout in XAML hinzuzufügen. Geben Sie mir Fehler sagen custompicker doesnt Unterstützung direkten Inhalt

<Button> 
    <Button.Flyout> 
         <local:custompicker> 
          <TextBlock Margin="20" FontSize="30" Text="MyPickerFlyout Test" /> 
         </local:custompicker> 

        </Button.Flyout> 
    </Button 


public class custompicker:PickerFlyoutBase 
     { 
      private AppBar OriginalAppBar; 

     private CommandBar MyCommandBar; 

     private Page CurrentPage; 

     public custompicker() 
     { 
      var cancelButton = new AppBarButton(); 
      cancelButton.Icon = new SymbolIcon(Symbol.Cancel); 
      cancelButton.Label = "Cancel"; 
      cancelButton.Click += (s, e) => 
      { 
       this.Hide(); 
      }; 

      MyCommandBar = new CommandBar(); 
      MyCommandBar.PrimaryCommands.Add(cancelButton); 

      this.Closed += MyPickerFlyout_Closed; 
      this.Opening += MyPickerFlyout_Opening; 
      this.Placement = Windows.UI.Xaml.Controls.Primitives.FlyoutPlacementMode.Full; 
     } 

     private void MyPickerFlyout_Opening(object sender, object e) 
     { 
      CurrentPage = (Windows.UI.Xaml.Window.Current.Content as Frame).Content as Page; 
      if (CurrentPage != null) 
      { 
       OriginalAppBar = CurrentPage.BottomAppBar; 

       CurrentPage.BottomAppBar = MyCommandBar; 
      } 
     } 

     private void MyPickerFlyout_Closed(object sender, object e) 
     { 
      if (CurrentPage != null) 
      { 
       CurrentPage.BottomAppBar = OriginalAppBar; 
      } 
     } 

     } 
+0

Bitte beachten Sie, dass ** ** PickerFlyout ist nicht für den Einsatz in UWP-Anwendungen unterstützt für Windows 10. Verwenden Sie stattdessen ein [** Flyout **] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.flyout) mit einer benutzerdefinierten Benutzeroberfläche um ein benutzerdefiniertes Picker-Steuerelement zu präsentieren. –

+0

Ja, ich bin mir dessen bewusst. Ich wollte nur wissen ob es in WP 8.1 möglich ist. Es ist mir nicht gelungen, ein benutzerdefiniertes Flyout von PickerFlyoutBase zu implementieren. Also, wenn Sie wissen, bitte posten Sie die Antwort – Archana

Antwort

1

PickerFlyout class eine ConfirmationButtonsVisible property hat, können wir mit dieser Eigenschaft deaktivieren beide „Done“ und „Abbrechen“ klicken.

Es gibt jedoch keine Möglichkeit, nur die Schaltfläche "Fertig" zu deaktivieren. Wir müssen einen benutzerdefinierten "PickerFlyout" implementieren. Im Folgenden ist eine einfache benutzerdefinierte "PickerFlyout" basierend auf Flyout, können Sie sich darauf beziehen, um Ihre eigenen zu implementieren.

public class MyPickerFlyout : Flyout 
{ 
    private AppBar OriginalAppBar; 

    private CommandBar MyCommandBar; 

    private Page CurrentPage; 

    public MyPickerFlyout() 
    { 
     var cancelButton = new AppBarButton(); 
     cancelButton.Icon = new SymbolIcon(Symbol.Cancel); 
     cancelButton.Label = "Cancel"; 
     cancelButton.Click += (s, e) => 
     { 
      this.Hide(); 
     }; 

     MyCommandBar = new CommandBar(); 
     MyCommandBar.PrimaryCommands.Add(cancelButton); 

     this.Closed += MyPickerFlyout_Closed; 
     this.Opening += MyPickerFlyout_Opening; 
     this.Placement = Windows.UI.Xaml.Controls.Primitives.FlyoutPlacementMode.Full; 
    } 

    private void MyPickerFlyout_Opening(object sender, object e) 
    { 
     CurrentPage = (Windows.UI.Xaml.Window.Current.Content as Frame)?.Content as Page; 
     if (CurrentPage != null) 
     { 
      OriginalAppBar = CurrentPage.BottomAppBar; 

      CurrentPage.BottomAppBar = MyCommandBar; 
     } 
    } 

    private void MyPickerFlyout_Closed(object sender, object e) 
    { 
     if (CurrentPage != null) 
     { 
      CurrentPage.BottomAppBar = OriginalAppBar; 
     } 
    } 
} 

Dann können Sie es in XAML wie verwenden:

<Button Content="Show Picker"> 
    <Button.Flyout> 
     <local:MyPickerFlyout Closed="PickerFlyout_Closed"> 
      <TextBlock Margin="20" FontSize="30" Text="MyPickerFlyout Test" /> 
     </local:MyPickerFlyout> 
    </Button.Flyout> 
</Button> 

Und es sieht so aus:
enter image description here

+0

Danke für den Code. Ich werde es versuchen. Ist es nicht möglich, aus der PickerFlyoutBase-Klasse zu implementieren? – Archana

+0

Wenn ich versuche, von PickerFlyoutBase zu implementieren, konnte ich meinem benutzerdefinierten Flyout keinen Inhalt hinzufügen. Warum ist es? Ich habe meine Frage bearbeitet. Bitte schauen Sie hinein, sagen Sie mir, was das Problem ist – Archana

+0

@LovetoCode: Ich habe die 'Flyout'-Klasse benutzt, da sie bereits' Content' Eigenschaft hat. Wenn Sie die 'PickerFlyoutBase' Klasse verwenden wollen, müssen Sie eine Eigenschaft wie diese implementieren und die' CreatePresenter' Methode und die 'ShoulderShowConfirmationButtons' Methode in Ihrer abgeleiteten Klasse überschreiben. –

Verwandte Themen