2017-01-30 1 views
0

플라이 아웃이 있는데 사용자가이 플라이 아웃 데이터를 변경하면 콘텐츠가로드되는 동안 완전히 접근 할 수 없도록 설정하려고합니다. 데이터를로드하고 숨기기 전에 표시하는 Z- 인덱스의 가장 높은 지점에 ProgressRing이있는 그리드를 사용하여 다른 컨트롤을 사용하여이 작업을 수행했습니다.플라이 아웃 오버레이

플라이 아웃은 다른 모든 것보다 렌더링되기 때문에 여전히 액세스 할 수 있습니다. 페이지의 "IsEnabled"속성을 "False"로 설정해도 페이지 내의 컨트롤이 계속 볼 수 있습니다. 것 같습니다 무엇

: 여기

문제의 스크린 샷이다 이

(콤보가 상호 작용)

이 어떻게 보일지 : enter image description here

(ComboBox는 대화 형이 아닙니다)

해결 방법에 대한 아이디어가 있으십니까? 내가 제대로 이해하지만, 당신의 속성의 내용을 플라이 아웃 IsHitTestVisible불투명도로 시도 할 경우

답변

0

확실하지. 나는이 작동하는 방법을 간단한 예제를 만들었어요 - 페이지의 XAML :

<Page.Resources> 
    <local:NullableToBool x:Key="NullConverter"/> 
</Page.Resources> 

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Width="400" Height="200"> 
    <ProgressRing Width="100" Height="100" Margin="50" HorizontalAlignment="Left" VerticalAlignment="Center" Visibility="Visible" 
        IsActive="{x:Bind TheButton.IsChecked, Mode=OneWay, Converter={StaticResource NullConverter}}"/> 
    <Button Content="Show flyout" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="50"> 
     <Button.Flyout> 
      <Flyout> 
       <Border Background="Gray" IsHitTestVisible="{x:Bind IsActive, Mode=OneWay}" Opacity="{x:Bind FlyoutOpacity, Mode=OneWay}"> 
        <ToggleButton Margin="20" x:Name="TheButton" IsChecked="False" Click="TheButton_Click" Content="Doing smth" Width="100"/> 
       </Border> 
      </Flyout> 
     </Button.Flyout> 
    </Button> 
</Grid> 

뒤에 코드 :

public class NullableToBool : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return value is bool ? (bool)value : false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

public sealed partial class MainPage : Page, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaiseProperty(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 

    private bool isActive = true; 
    public bool IsActive 
    { 
     get { return isActive; } 
     set { isActive = value; RaiseProperty(nameof(IsActive)); } 
    } 

    private double flyoutOpacity = 1.0; 
    public double FlyoutOpacity 
    { 
     get { return flyoutOpacity; } 
     set { flyoutOpacity = value; RaiseProperty(nameof(FlyoutOpacity)); } 
    } 

    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private async void TheButton_Click(object sender, RoutedEventArgs e) 
    { 
     IsActive = false; 
     FlyoutOpacity = 0.1; 
     await Task.Delay(3000); 
     IsActive = true; 
     FlyoutOpacity = 1.0; 
     (sender as ToggleButton).IsChecked = false; 
    } 
} 
0

을 그냥 ProgressRing 보여주는 동안 UI를 차단합니다. Template10에 ModalDialog을 사용할 수 있습니다. 사용자 할 때까지 응용 프로그램의 나머지 블록의 상호 작용이 또는 일부 응용 프로그램 작업이 완료를 기각했다고 UI 요소 -

는 거의 모든 응용 프로그램은 모달 대화 상자의 형태를 표시 할 필요가있다.

관련 문제