【问题标题】:Half Transparent layer on application screen UWP应用程序屏幕 UWP 上的半透明层
【发布时间】:2023-04-07 16:49:01
【问题描述】:

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

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

谢谢大家!

【问题讨论】:

    标签: c# uwp uwp-xaml


    【解决方案1】:

    我想你需要某种 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;
            }
        }
    }
    


    【讨论】:

    • 谢谢队友,但它不是 UWP 代码。我认为它在 WPF 下工作,而不是在 UWP 上。
    • 抱歉,我混淆了我的标签以为它是 wpf,请查看编辑,我做了一个 UWP 版本,在这种情况下你需要使用画布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多