我有一個彈出窗口,當用戶更改數據時,我想在內容加載時使其完全無法訪問。我已經通過在Z-Index中的最高點處使用ProgressRing的網格來實現其他控件,我在加載數據之前顯示並在之後隱藏。以上覆蓋層彈出
問題是,彈出窗口呈現超出其他所有內容,這使得它仍然可以訪問。即使將頁面的「IsEnabled」屬性設置爲「False」,也可使其中的控件保持可見。
這裏的問題的截圖:
(組合框的交互)
(組合框不是互動的)
關於如何解決這個問題的任何想法?
我有一個彈出窗口,當用戶更改數據時,我想在內容加載時使其完全無法訪問。我已經通過在Z-Index中的最高點處使用ProgressRing的網格來實現其他控件,我在加載數據之前顯示並在之後隱藏。以上覆蓋層彈出
問題是,彈出窗口呈現超出其他所有內容,這使得它仍然可以訪問。即使將頁面的「IsEnabled」屬性設置爲「False」,也可使其中的控件保持可見。
這裏的問題的截圖:
(組合框的交互)
(組合框不是互動的)
關於如何解決這個問題的任何想法?
不知道如果我理解正確的,但是你可以用IsHitTestVisible和不透明度嘗試的你性質彈出的內容。我做了一個簡單的例子,它會如何工作 - 頁面的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;
}
}
如果你只是想阻止用戶界面,而ProgressRing表現。您可以在Template10中使用ModalDialog。
幾乎每一個應用程序有需要顯示某種形式的一個模式對話框 - UI元素與應用程序的其餘部分,直到用戶交互塊已駁回或某些應用程序的任務已經完成。