整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          C# WPF遮罩對話框(Popup Message Overlay/ Dialog Host)

          間如流水,只能流去不流回!

          點贊再看,養成習慣,這是您給我創作的動力!

          本文 Dotnet9 https://dotnet9.com 已收錄,站長樂于分享dotnet相關技術,比如Winform、WPF、ASP.NET Core、Xamarin.Forms等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分享自己熟悉的、自己會的。

          閱讀導航:

          • 一、先看效果
          • 二、本文背景
          • 三、代碼實現
          • 四、文章參考
          • 五、代碼下載

          一、先看效果

          二、本文背景

          YouTube Design com WPF 大神處習得,常用的遮罩對話框實現,使用的開源 C# WPF控件庫 MaterialDesignInXAML ,本站曾有介紹:開源C# WPF控件庫《MaterialDesignInXAML》。

          三、代碼實現

          3.1 添加Nuget庫

          站長使用.Net Core 3.1創建的WPF工程,創建“ScreenOverlayMessage”解決方案后,需要添加兩個Nuget庫:MaterialDesignThemes和MaterialDesignColors,上圖的效果是使用該控件庫實現的,非常強大。

          3.2 工程結構

          不需要截圖,只修改了兩個文件,App.xaml添加MD控件4個樣式文件,MainWindow主窗口實現效果。

          3.3 App.xaml引入MD控件樣式

          <Application x:Class="DropDownMenu.App"
                       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                       xmlns:local="clr-namespace:DropDownMenu"
                       StartupUri="MainWindow.xaml">
              <Application.Resources>
                  <ResourceDictionary>
                      <ResourceDictionary.MergedDictionaries>
                          <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml"/>
                          <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml"/>
                          <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml"/>
                          <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Indigo.xaml"/>
                      </ResourceDictionary.MergedDictionaries>
                  </ResourceDictionary>
              </Application.Resources>
          </Application>

          3.4 主窗體

          MainWindow.xaml,整體布局,看上圖加上下面的界面代碼,添加界面左上角logo圖標、左側導航菜單等,下面即是全部代碼。

          <Window x:Class="ScreenOverlayMessage.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                  xmlns:local="clr-namespace:ScreenOverlayMessage"
                  mc:Ignorable="d"
                  xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" MouseDown="Window_MouseDown"
                  Title="MainWindow" Height="576" Width="1024" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" WindowStyle="None" Background="#FF423A3A">
              <Grid>
                  <materialDesign:DialogHost BorderBrush="{DynamicResource MaterialDesignDivider}">
                      <materialDesign:DialogHost.DialogContent>
                          <Grid Width="300" Height="150" HorizontalAlignment="Center">
                              <StackPanel Orientation="Horizontal" Margin="15">
                                  <materialDesign:PackIcon Kind="Folder" Foreground="{StaticResource PrimaryHueMidBrush}" Width="50" Height="50"/>
                                  <TextBlock Foreground="Gray" Width="200" Margin="15 5" TextWrapping="Wrap">
                                      允許應用程序訪問您計算機上的照片、媒體和文件?
                                  </TextBlock>
                              </StackPanel>
                              <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="15">
                                  <Button Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}" Style="{DynamicResource MaterialDesignFlatButton}" Margin="4" VerticalAlignment="Center">
                                      拒絕
                                  </Button>
                                  <Button Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}" Style="{DynamicResource MaterialDesignFlatButton}" Margin="4" VerticalAlignment="Center">
                                      允許
                                  </Button>
                              </StackPanel>
                          </Grid>
                      </materialDesign:DialogHost.DialogContent>
                      <Grid>
                          <StackPanel Width="200" HorizontalAlignment="Left" Background="#FF472076">
                              <Grid Height="150" Background="White">
                                  <Image Source="https://img.dotnet9.com/logo.png"/>
                              </Grid>
                              <Button Style="{StaticResource MaterialDesignFlatButton}" Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}">
                                  <StackPanel Orientation="Horizontal" Height="30">
                                      <materialDesign:PackIcon Kind="PhotoAlbum" Width="20" Height="20" VerticalAlignment="Center"/>
                                      <TextBlock Text="照片" Margin="20 0" FontSize="15" VerticalAlignment="Center"/>
                                  </StackPanel>
                              </Button>
                              <Button Style="{StaticResource MaterialDesignFlatButton}" Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}">
                                  <StackPanel Orientation="Horizontal" Height="30">
                                      <materialDesign:PackIcon Kind="Music" Width="20" Height="20" VerticalAlignment="Center"/>
                                      <TextBlock Text="音樂" Margin="20 0" FontSize="15" VerticalAlignment="Center"/>
                                  </StackPanel>
                              </Button>
                          </StackPanel>
                      </Grid>
                  </materialDesign:DialogHost>
              </Grid>
          </Window>

          重點講解:

          • materialDesign:DialogHost:設置遮罩對話框覆蓋的地方,即彈出遮罩對話框后,背后有陰影的位置。
          • materialDesign:DialogHost.DialogContent:對話框內容,即彈出的對話框配置

          后臺有個拖動窗體代碼:

          private void Window_MouseDown(object sender, MouseButtonEventArgs e)
          {
              DragMove();
          }

          四、文章參考

          建議直接打開大神視頻學習,他的YouTube上還有很多代碼視頻哦,參考:
          參考視頻: Design com WPF: https://www.youtube.com/watch?v=Dwi9o3K73XM

          五、代碼下載

          文章中代碼已經全部貼出。

          除非注明,文章均由 Dotnet9 整理發布,歡迎轉載。

          轉載請注明本文地址:https://dotnet9.com/6769.html



          tml

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>點擊彈窗遮罩</title>

          </head>

          <body>

          <button id="btn">點擊</button>

          <!-- 遮罩 -->

          <div class="cover" id="cover"></div>

          <!-- 彈框 -->

          <div class="grid" id="grid_box">

          <span class="grid_close">x</span>

          <h3>標題</h3>

          <div>hahaha</div>

          </div>

          </body>

          </html>

          css

          <style type="text/css">

          .cover{

          display: none;

          position: fixed;

          width:100%;

          height:100%;

          z-index:2;

          background: rgba(102,102,102,0.7);

          top:0;

          left:0;

          }

          .grid{

          display: none;

          position: fixed;

          z-index: 3;

          width: 500px;

          min-height: 300px;

          top:50%;

          left:50%;

          margin: -150px 0 0 -250px;

          background: #fff;

          padding: 15px;

          border-radius:10px;

          }

          .grid_close{

          background: #fff;

          float:right;

          }

          </style>

          js

          <script type="text/javascript">

          var Btn = document.getElementById('btn'),

          Cover = document.getElementById('cover'),

          Box = document.getElementById('grid_box'),

          GridClose = Box.getElementsByClassName('grid_close')[0];

          //點擊彈出彈窗

          Btn.onclick =function(){

          ShowHide(true,Cover,Box);

          }

          //點擊關閉按鈕關閉彈窗

          GridClose.onclick=function(){

          ShowHide(false,Cover,Box);

          }

          //點擊遮罩空白關閉彈窗

          Cover.onclick=function(){

          ShowHide(false,Cover,Box);

          }

          //關閉公用方法

          function ShowHide(Bool,item1,item2){

          for (var i = 1,len=arguments.length; i<len; i++) {

          if (Bool) {

          arguments[i].style.display="block";

          }else{

          arguments[i].style.display="none";

          }

          }

          }

          </script>

          業網頁推廣時出現網頁兼容問題,不僅在pc端開發中會碰到,而且在APP開發當中也會經常碰到。

          1、禁止圖片點擊放大

          部分安卓手機點擊圖片會放大,如需要禁止放大,只需要設置css屬性,這樣會讓img標簽的點擊事件失效,如果想要給圖片添加點擊事件就要給上面再寫一層。

          方案:img{ pointer-events:none; }

          2、禁止iOS設別長串數字為電話

          方案:<meta name="format-detection" content="telephone=no" />

          3、禁止賦值、選中文本

          方案:設置CSS屬性,-webkit-user-select:none

          4、一些情況下對非可點擊元素如(label,span)監聽點擊事件,不會在iOS下觸發

          方案:css屬性增加 cursor:pointer

          5、上下拉動滾動條時卡頓、慢

          方案:body{ -webkit-overflow-scrolling:touch;overflow-scrolling:touch; }

          6、安卓不會自動播放視頻

          安卓手機的autoplay沒有生效,需要手動觸發一下

          方案:window.addEventListener('touchstart',()=>{ audio.play(); },false)

          7、半透明的遮罩層改為全透明

          在iOS上,當點擊一個鏈接或者通過js綁定了點擊事件的元素時,會出現一個半透明的背景,當手指離開屏幕,灰色背景消失,出現“閃屏”

          方案:html,body{ -webkit-tap-highlight-color:rgba(0,0,0,0); }

          8、ios系統全屏狀態下瀏覽器上下滾動時會出現底色問題

          移動端項目要求是全屏滾動,用的是 fullpage,上下滾動時安卓正常,蘋果手機瀏覽器上下滾動時會出現底色問題

          方案:document.body.addEventListener('touchmove',function(e) { e.preventDefault();}, {passive:false})。


          主站蜘蛛池模板: 国产波霸爆乳一区二区| 日本片免费观看一区二区| 国产一区二区在线视频| 国产婷婷一区二区三区| 色噜噜AV亚洲色一区二区| 日韩精品无码一区二区视频| 国产免费一区二区三区不卡| 日本欧洲视频一区| 国产乱码精品一区二区三区四川| 日韩视频免费一区二区三区| 国产精品无码一区二区三区毛片 | 一区二区三区波多野结衣 | 亚洲老妈激情一区二区三区| 国产精品亚洲一区二区麻豆| 精品乱码一区内射人妻无码| 日本一区二区三区精品中文字幕| 国产精品综合AV一区二区国产馆| 精品一区二区三区四区电影| 中文激情在线一区二区| 亚洲一区无码中文字幕乱码| 国产成人无码精品一区二区三区| 无码av免费毛片一区二区| 91成人爽a毛片一区二区| 国产福利视频一区二区 | 亚洲成av人片一区二区三区| 日本不卡一区二区三区| 骚片AV蜜桃精品一区| 亚洲欧洲一区二区| 台湾无码一区二区| 日本高清一区二区三区| 亚洲av永久无码一区二区三区| 一区二区三区亚洲| 精品一区高潮喷吹在线播放| 无码免费一区二区三区免费播放| 香蕉免费看一区二区三区| 三上悠亚精品一区二区久久| 久久久国产一区二区三区| 久久国产一区二区三区| 毛片一区二区三区无码| 国模一区二区三区| 亚洲乱码av中文一区二区 |