2017-04-13 5 views
0

현재 Visual Studio 2017에서 블렌드로 UWP를 만들고 있지만 플라이 아웃 도구에 문제가 있습니다. 나는 그것이 열릴 때 수동으로 제어하기를 원했고, 초점을 잃었을 때 스스로 닫을 때 기능을 기본적으로 사용할 수 없도록 닫으면 플라이 아웃을 닫기 전에 앱의 다른 도구 나 객체와 상호 작용할 수있게되기를 바랬다. 이 시도하기 위해 일부 C# 코드를 추가하려고했지만 성공했다. 템플릿에서 변경해야하거나 XAML 또는 선호하는 C#에서 수행 할 수 있는지 확실하지 않습니다. 나는 StackPanel의에 플라이 아웃을 부착하고 다음 코드를 사용하여 별도의 위치에서 버튼 클릭 이벤트를 추가했습니다 : 나는 기대했다블렌드 UWP 플라이 아웃 도구가 열린 채로 있지 않습니다.

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

이 플라이 아웃 개방을 유지하기 위해 일하는 것이 있지만 그렇지 않습니다. 나는 다음과 같은 C# 코드로를 닫 생각했던 다른 버튼이 있습니다

flyout.Hide(); 

을하지만 상관없이 코드를 자동으로 여전히 닫기 때문에 필요하지 않습니다 것으로 보인다. 누구든지 어떤 제안이 있습니까?

+0

: // 메타. stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) 답변을 받아들입니다. 대단히 감사합니다! –

답변

0

정보 또는 사용자 상호 작용이 필요한 간단한 UI를 표시하는 컨트롤을 나타냅니다. 대화 상자와 달리 Flyout은 외부에서 클릭하거나 두드 리거나 장치의 뒤로 버튼을 누르거나 'Esc'키를 눌러 가볍게 닫을 수 있습니다.

시나리오의 경우 Flyout 컨트롤은 합리적인 선택이 아닙니다. ContentDialog을 사용하여이를 달성 할 수 있습니다. 그리고 다음 코드는 contentDialog의 기능을 구현합니다.

<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> 

이 당신을 참조 할 수 있습니다 UWP UI의 기본에 대한 공식 code sample. 만약 당신이 Flyout contorl 사용을 고집한다면. my code sample을 참조 할 수 있습니다. 그러나 그것은 공식에 의해 제안되지 않습니다.

에서 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를 대답은 당신을 돕고 당신의 문제하시기 바랍니다 [표시] (HTTPS를 해결 한 경우

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(); 
} 
관련 문제