应用程序屏幕 UWP 上的半透明层

Half Transparent layer on application screen UWP

有没有办法在UWP中为应用添加半透明层? 在普通的 .NET 中有可能,但在 UWP 中我找不到它。

我需要这种行为,使整个应用程序除一个控件外都处于非活动状态,并在控件旁边显示一个工具提示。申请中需要教程

谢谢大家!

我想你需要某种 BlockUI/UnBlockUI 行为,不确定是否有第 3 方,但你可以发挥创造力来实现这一点。

利用 ZIndexOpacityDependencyProperty 和一些 事件处理,你可以实现。

xaml

<Page x:Name="root"
     x:Class="App1.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
      d:DesignHeight="450" d:DesignWidth="800">
    <Canvas Background="AliceBlue">
        <Rectangle  Canvas.Left="30" Canvas.ZIndex="{Binding BlockerZIndex, ElementName=root}"  Width="180" Height="200" Fill="White" Opacity="0.5"/>
        <Button Canvas.ZIndex="1" Canvas.Left="30" Canvas.Top="70" Content="Send Email" Width="150" Height="50" Background="Blue" Foreground="Black" />
        <Button Canvas.ZIndex="1"  Canvas.Left="30" Canvas.Top="140" Content="Print Receipt" Width="150" Height="50" Background="Blue" Foreground="Black" />
        <Button x:Name="BlockUnBlockUIButton" Canvas.Left="30" Canvas.ZIndex="1" Canvas.Top="210" Width="150" Height="50" Background="Blue" Foreground="Black" Click="BlockUnBlockUIButton_OnClick" >
            <TextBlock Text="Block/UnBlock UI" ToolTipService.ToolTip="Block/Unblock UI"/>
        </Button>
    </Canvas>
</Page>

代码隐藏

using Windows.UI.Xaml;

namespace App1
{
    public sealed partial class MainPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        public static readonly DependencyProperty BlockerZIndexProperty =
            DependencyProperty.Register(
                nameof(BlockerZIndex),
                typeof(int),
                typeof(MainPage),
                new PropertyMetadata(2));

        public int BlockerZIndex
        {
            get => (int)GetValue(BlockerZIndexProperty);
            set => SetValue(BlockerZIndexProperty, value);
        }

        private void BlockUnBlockUIButton_OnClick(object sender, RoutedEventArgs e)
        {
            BlockerZIndex = BlockerZIndex == 1 ? 2 : 1;
        }
    }
}