因爲界面設計須要,要給彈窗添加蒙板效果,在百度和google搜索了半天,居然沒有一個滿意的方案,最後只能本身想辦法實現了一個,原理仍是比較簡單的,如今分享給你們。測試
先看一下效果。。google
原理其實很簡單,啓動項目的時候,先在主窗體最根部的Grid 添加一個控件,設置好顏色和透明度,隱藏:spa
<Grid> <Button Content="測試彈窗" Width="50" Height="20" Click="Button_Click"/> <StackPanel x:Name="spMasking" Opacity="0.4" Background="Black" Visibility="Collapsed" /> </Grid>
在這裏我用的stack panel,具體什麼都沒影響。黑色背景0.4透明度恰好呈現蒙板效果。設計
須要蒙板彈窗的時候,調用方法blog
public static void ShowDialog(Window owner, Window window) { StackPanel spMasking = ControlHelper.GetChildObject<StackPanel>(owner, "spMasking"); spMasking.Visibility = Visibility.Visible; window.ShowDialog(); }
須要關閉蒙板效果的時候,調用方法ci
public virtual void ClearMask(object sender, EventArgs e) { var owner = Application.Current.MainWindow; StackPanel spMasking = ControlHelper.GetChildObject<StackPanel>(owner, "spMasking"); spMasking.Visibility = Visibility.Collapsed; }
這樣便可實現一個蒙板彈窗get
有同窗可能要問,這樣的話,窗體最上面一行的標題,放大縮小按鈕,並無被擋住。這裏,個人作法是是隱藏掉了默認的樣式,本身應用Grid封裝了新的自定義樣式,而後應用Grid.ColumnSpan Grid.RowSpan跨列實現蒙板遮擋,若是有遇到問題的夥伴歡迎留言。it
連接:https://pan.baidu.com/s/1eS2B5ZW io
密碼: 2kmfclass