2017-04-13 7 views
0

Ich mache derzeit eine UWP in Blend in Visual Studio 2017, aber ich habe Probleme mit dem Flyout-Tool. Ich hatte gehofft, manuell zu steuern, wenn es öffnet und wenn es schließt im Wesentlichen deaktivieren das Feature, wenn es sich selbst schließt, wenn es den Fokus verliert, so dass ich in der Lage sein kann, mit anderen Tools oder Objekte in der App vor dem Schließen des Flyouts interagieren. Ich habe versucht, einige C# -Codes hinzuzufügen, um dies zu versuchen, aber ich hatte keinen Erfolg. Ich bin mir auch nicht sicher, ob dies in der Vorlage geändert werden müsste oder ob es von XAML oder vorzugsweise von C# erfolgen könnte. Ich habe das Flyout zu einem Stackpanel angebracht ist und eine Schaltfläche Click-Ereignis in einem separaten Ort mit dem folgenden Code hinzugefügt:Blend UWP Flyout-Tool nicht offen bleiben

flyout.AllowFocusOnInteraction = true; 
flyout.AllowFocusWhenDisabled = true; 
flyout.ShowAt(stackpanel); 

Ich hatte gehofft, dies funktionieren würde die Flyout offen zu halten, aber es funktioniert nicht. Ich habe eine andere Taste, die ich im Sinne hatte es mit dem folgenden C# -Code zu schließen:

flyout.Hide(); 

Aber es scheint, dass es nicht notwendig ist, weil es automatisch noch unabhängig von dem Code schließt. Hat jemand irgendwelche Vorschläge?

+0

Wenn die Antwort Sie hat dazu beigetragen, und lösen Ihr Problem bitte [mark] (https: // Meta. stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) die Antwort als akzeptiert.Vielen Dank! –

Antwort

0

Stellt ein Steuerelement dar, das eine leichtgewichtige Benutzeroberfläche anzeigt, bei der es sich entweder um Informationen handelt oder Benutzerinteraktion erforderlich ist. Anders als bei einem Dialog kann ein Flyout Licht gelöscht werden, indem Sie darauf klicken oder tippen, indem Sie auf die Zurück-Taste des Geräts drücken oder die Esc-Taste drücken.

Für Ihr Szenario ist die Flyout Steuerung keine vernünftige Wahl. Sie können dies erreichen, indem Sie ContentDialog verwenden. Und der folgende Code realisiert das Feature von contentDialog. Diese

<ContentDialog 
x:Class="AppUIBasics.ControlPages.ContentDialogExample" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:AppUIBasics.ControlPages" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
Title="SIGN IN" 
PrimaryButtonText="sign in" 
SecondaryButtonText="cancel" 
PrimaryButtonClick="ContentDialog_PrimaryButtonClick" 
SecondaryButtonClick="ContentDialog_SecondaryButtonClick"> 
<StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> 
<TextBox Name="userNameTextBox" Header="User name"/> 
<PasswordBox Name="passwordTextBox" Header="Password" IsPasswordRevealButtonEnabled="True"/> 
<CheckBox Name="saveUserNameCheckBox" Content="Save user name"/> 
<TextBlock x:Name="errorTextBlock" /> 
<TextBlock Text="Lorem ipsum dolor sit amet, consectetur adipisicing elit." TextWrapping="Wrap" /> 
</StackPanel> 
</ContentDialog> 

die offizielle code sample über UWP UI Grund, die Sie sich beziehen können. Wenn Sie darauf bestehen, Flyout contorl zu verwenden. Sie könnten sich auf my code sample beziehen. Jedoch wird es vom Beamten nicht vorgeschlagen.

MainPage.xaml

<Button Content="Show Flyout"> 
    <Button.Flyout> 
     <Flyout x:Name="flyout" Closing="flyout_Closing" > 
      <StackPanel> 
       <TextBox x:Name="MyTextBox" Text="You can edit this text by tapping it."/> 
       <Button Content="close" Click="Button_Click"/> 
      </StackPanel> 
     </Flyout> 
    </Button.Flyout> 
</Button> 

MainPage.xaml.cs

private bool manual = false; 

private void flyout_Closing(FlyoutBase sender, FlyoutBaseClosingEventArgs args) 
{ 
    if(manual == true) 
    { 
     args.Cancel = false; 
    } 
    else 
    { 
     args.Cancel = true; 

    } 
    manual = false; 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    manual = true; 
    flyout.Hide(); 
} 
Verwandte Themen