1. 程式人生 > >WPF實現半透明背景的彈框

WPF實現半透明背景的彈框

原文連結:http://blog.csdn.net/u011389297/article/details/52203242
因為以前沒有接觸過WPF,所以在使用過程中遇到了很多的問題,就拿這次來說為了實現背景為充滿視窗的半透明的灰色彈框的效果時,就不知道怎麼實現了,在百度上查找了半天也沒有找到,後來在CSDN的論壇上看到一個人問了類似的問題,有人回答說:要分開製作兩個視窗,這給了我提示,後來終於做出來了。下面就是我的實現過程:

一開始我是隻使用一個面板來設定透明的後來發是不可以的,因為他會將裡面的內容也會透明化,就是這種效果 。
內容被透明化的視窗
這裡寫圖片描述
具體程式碼如下:
主畫面的MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="725">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition
Width="97*"/>
<ColumnDefinition Width="319*"/> <ColumnDefinition Width="101*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="49*"/> <RowDefinition Height="220*"/> <RowDefinition
Height="51*"/>
</Grid.RowDefinitions> <Canvas x:Name="cav" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"> <!--放這個按鈕主要是為了說明,下面的那兩個面板並不影響控制元件的使用--> <Button Content="彈出提示框" Click="Button_Click" Canvas.Left="10" Canvas.Top="10" Width="112"></Button> <TextBlock Text="此處隨便寫一些東西" FontSize="20" Canvas.Left="210" Canvas.Top="10"></TextBlock> </Canvas> <Button Background="LightBlue" Content="中間隨便放一個大Button,將背景設定為淡藍色,方便觀察彈框" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3"></Button> <Button Content="點選彈出彈框" x:Name="btn" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Click="btn_Click"></Button> <!--用作透明化的StackPanel--> <StackPanel x:Name="stpBG" Opacity="0.4"> <ContentControl x:Name="ccl" Width="300" Height="300"></ContentControl> </StackPanel> </Grid> </Window>

後臺程式碼MainWindow.xaml:

namespace WpfApplication1
{
    /// <summary>
    /// MainWindow.xaml 的互動邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            //將背景框的顏色設定為黑色,因為已經將透明度設定為0.4了,所以黑色才會顯示為灰色的效果
            stpBG.Background = Brushes.Black;

            //設定背景框充滿整個螢幕
            Grid.SetColumnSpan(stpBG, 3);
            Grid.SetRowSpan(stpBG, 3);

            //新增內容
            ccl.Content = new UserControl1();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("你看吧,不影響我的使用");
        }
    }
}

彈框的內容,因為彈框內容是一樣的,就是一個紅色背景的方框,所以下面我就不再貼上彈框的程式碼了UserControl1.xaml:

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid Background="Red">

    </Grid>
</UserControl>

因為發現這樣的效果並不理想。

於是就採用了兩個面板的方式,一個專門做為透明的背景,一個用來承接內容,效果如下:
在點選按鈕彈出彈框之前的效果 。
這裡寫圖片描述
點選按鈕彈出彈框之後的效果
這裡寫圖片描述
具體程式碼如下;
主畫面MainWindow.xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="725">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="97*"/>
            <ColumnDefinition Width="319*"/>
            <ColumnDefinition Width="101*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="49*"/>
            <RowDefinition Height="220*"/>
            <RowDefinition Height="51*"/>
        </Grid.RowDefinitions>
        <Canvas x:Name="cav" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3">
            <!--放這個按鈕主要是為了說明,下面的那兩個面板並不影響控制元件的使用-->
            <Button Content="彈出提示框" Click="Button_Click" Canvas.Left="10" Canvas.Top="10" Width="112"></Button>
            <TextBlock Text="此處隨便寫一些東西" FontSize="20" Canvas.Left="210" Canvas.Top="10"></TextBlock>
        </Canvas>
        <Button Background="LightBlue" Content="中間隨便放一個大Button,將背景設定為淡藍色,方便觀察彈框" 
                Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3"></Button>
        <Button Content="點選彈出彈框" x:Name="btn" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Click="btn_Click"></Button>
        <!--下面這兩個才是重點,對於作為背景採用什麼樣的面板是無所謂的,這裡我用的是StackPanel-->
        <StackPanel x:Name="stpBG" Opacity="0.4"></StackPanel>
        <!--承接具體彈框的內容的面板看個人的具體業務來選擇-->
        <StackPanel x:Name="stpContent" HorizontalAlignment="Center" VerticalAlignment="Center">
            <ContentControl x:Name="ccl" Width="300" Height="300"></ContentControl>
        </StackPanel>
    </Grid>
</Window>

後臺程式碼MainWindow.xaml:

namespace WpfApplication1
{
    /// <summary>
    /// MainWindow.xaml 的互動邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btn_Click(object sender, RoutedEventArgs e)
        {
            //將背景框的顏色設定為黑色,因為已經將透明度設定為0.4了,所以黑色才會顯示為灰色的效果
            stpBG.Background = Brushes.Black;

            //設定背景框充滿整個螢幕
            Grid.SetColumnSpan(stpBG, 3);
            Grid.SetRowSpan(stpBG, 3);

            //內容的設定與背景一致
            Grid.SetColumnSpan(stpContent, 3);
            Grid.SetRowSpan(stpContent, 3);

            //新增內容
            ccl.Content = new UserControl1();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("你看吧,不影響我的使用");
        }
    }
}

相關推薦

WPF實現透明背景

原文連結:http://blog.csdn.net/u011389297/article/details/52203242 因為以前沒有接觸過WPF,所以在使用過程中遇到了很多的問題,就拿這次來說為了實現背景為充滿視窗的半透明的灰色彈框的效果時,就不知道怎麼實

使用z-index和position:absolute實現DIV覆蓋和重疊,可實現透明背景,上邊漂浮一層不透明的div層。

Div的重疊和覆蓋可以使用z-index和position:absolute決定定位來實現,具體實現程式碼如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3

透明背景圖的(dialog)

在開發中。我們經常會遇到帶半透明背景圖的彈框 ,如圖: 我在開發中用到這種情況也比較多。剛開始在網上搜尋了很多資料。但是很多隻寫了一般。達不到實際效果。自己根據資料還有實踐最終實現了效果:廢話不多說。直接上程式碼 首先自定義一個半透明的背景樣式 <!-- 對話方塊

Android Alertdialog設定透明背景

自定義AlertDialog基本步驟: 1.寫一個layout佈局,使用inflater生成對應view物件 2.新建AlertDialog.Builder物件builder 3.builder設定自定義佈局view,從view中獲取各控制元件,設定對應業務邏輯 4.bui

全屏透明背景對話

對話 class str screen android rip att ati create 透明背景對話框 AlertDialog.Builder mBuilder = new AlertDialog.Builder(this, R.

基於模板測試實現透明多邊形運算

多邊形常見操作 android api sample中的region 操作如下圖: 本文基於opengl 的stencil buffer 實現這幾種多邊形運算。 OpenGL 模板測試實現 如下圖:

筆記:狀態列佔位,以及隱藏5.0+透明背景,加在非全屏,oncreate中,全屏切非全屏不抖動。

public void initStatusBar() { StatusBarUtil.setLightMode(this); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { this.g

Qt實現透明、無邊框、可自由移動、不規則的窗體

先出示效果圖一張,如果不是讀者需要的,讀者可以看完效果圖之後就關閉本網頁啦。 功能要點 視窗無邊框 可自由拖動 背景透明度自定義 邊框可設定為異形 實現步驟                 第1步:新建一個QWidget的子類,這裡命名為BaseWidge

css設定透明背景顏色並且內容不會受影響的解決辦法

background-color:rgba(0,0,0,0.5); 0,0,0,0.5 其中0,0,0代表RGB顏色 0.5代表透明度 所以展示為黑色半透明狀態並且不會影響內容也為半透明狀態

Android之Dialog透明背景消失

     近日,遇到一個Dialog半透明背景消失的問題,背景需求是自定義Dialog實現警告提示框: // 初始化警告彈出框 alertDialog = new EmpAlertView(context, Utils.getIdByName(context, "styl

OpenGL使用混合來實現透明效果 .

原文地址:http://heroxx.blog.163.com/blog/static/5423580200908113124143/ 今天介紹關於OpenGL混合的基本知識。混合是一種常用的技巧,通常可以用來實現半透明。但其實它也是十分靈活的,你可以通過不同的設定得到不同的混合結果,產生一些有趣或者奇

移動端的坑---點選元素後閃爍、有透明背景

1、點選元素後閃爍、有半透明背景 給元素新增: -webkit-tap-highlight-color : rgba (255, 255, 255, 0) ; -webkit-tap-highlig

Direct3D進行Alpha混合實現透明效果

這次給大家奉獻的是我最近學習DirectX基礎的一些內容:進行Alpha混合。雖然我在很多的遊戲中看到了美輪美奐的半透明效果,但是能夠自己製作出半透明的效果還是一件非常欣慰的事情。因為這不僅僅是自己目的的達成,還是自己自學能力的提升。 Alpha是畫素顏色中的一個值,但

透明背景,文字不透明,ie8和現代瀏覽器的相容性

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Document</title>     &

vue專案中實現maptalks地圖上使用videojs播放實時視訊rtmp流

不限制於vue專案,區別只是相關檔案的引入 最終實現效果如下: 1、首先引入需要的資源:vue-video-player、maptalks相關 npm install vue-video-player --save npm install maptalks -

Android 背景可滑動登入介面 「 實現不壓縮背景出鍵盤 」

Android 背景可滑動登入介面 廢話不多說,先看下實現後的效果: 實現思路 看到上邊 gif 圖的效果,主要列舉一下實現過程過程中遇到的難點。 如何使鍵盤彈出時候不遮擋底部登入佈局; 當鍵盤彈出的時候如何不壓縮背景

Qt實現透明遮罩效果

本文索引 需求 原理 實現遮罩控制元件 遮罩的使用 需求 我們在顯示一些模態對話方塊的時候,往往需要將對話方塊的背景顏色調暗以達到突出當前對話方塊的效果,例如: 對話方塊的父視窗除了標題欄以外的部分都變暗了,在父視窗的對比下對話方塊的顯示效果就得

OpenGL入門學習之九——使用混合來實現透明效果

混合是什麼呢?混合就是把兩種顏色混在一起。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。 假設我們需要繪製這樣一個場景:透過紅色的玻璃去看綠色的物體,那麼可以先繪製綠色的物體,再繪製紅色玻璃。在繪製紅色玻璃的時候,利用“

html通過css來設定透明背景

Html/Css標籤透明度效果的實現,在html中,實現半透明背景,在HTML Div+Css程式設計中,為了實現版透明,通常有3中做法。 第一種是HTML5的透明,在H5中支援透明背景顏色,但遺憾的是,H5中的辦透明背景顏色只支援 rgba的寫法,不支援16進位制的

如何用VB實現透明控制元件

    本程式碼演示半透明控制元件的實現過程。如果是自定義控制元件,實現起來非常簡單,如果是系統控制元件,則要複雜一些。如果系統控制元件支援屬主畫,跟自定義控制元件思路完全是一樣的,只不過程式碼是寫在子類化的過程裡。      先建一個標準EXE工程,然後新增一個使用者控制