wpf 自定義消息框

来源:http://www.cnblogs.com/xinghen/archive/2016/06/01/5550106.html
-Advertisement-
Play Games

相信很多人用過MessageBox.show(),是不是覺得這個消息框有點醜呢,反正我是覺得有點醜的,所以我自己重寫了一個。先不說,上兩幅圖對比先: 當然,也不是很好看,不過比原有的好多了。 不多說了,先上xmal代碼: 1 <Window x:Class="MESBox.MEGBox" 2 xml ...


 相信很多人用過MessageBox.show(),是不是覺得這個消息框有點醜呢,反正我是覺得有點醜的,所以我自己重寫了一個。先不說,上兩幅圖對比先:

  

當然,也不是很好看,不過比原有的好多了。

不多說了,先上xmal代碼:

 1 <Window x:Class="MESBox.MEGBox"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="MEGBox"  MinWidth="200"  WindowStyle="None"  
 5         AllowsTransparency="True" Background="#AA000000"
 6         WindowStartupLocation="CenterScreen" Window.SizeToContent="WidthAndHeight"
 7         MouseLeftButtonDown="DragWindow"  ShowInTaskbar="False">
 8     <Window.Resources>
 9         <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
10             <Setter Property="Foreground" Value="White"/>
11             <Setter Property="Template">
12                 <Setter.Value>
13                     <!--設置樣式 -->
14                     <ControlTemplate TargetType="{x:Type Button}">
15                         <Grid>
16                             <Rectangle x:Name="Rectangle" Stroke="#FFFFFFFF" StrokeMiterLimit="1.000000" StrokeThickness="0.500000" RadiusX="12.5" RadiusY="12.5" Fill="#FF777777">
17                             </Rectangle>
18                             <ContentPresenter x:Name="ContentPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
19                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/>
20                         </Grid>
21                         <!-- 設置滑鼠移到關閉按鈕上的效果 -->
22                         <ControlTemplate.Triggers>
23                             <Trigger Property="IsMouseOver" Value="true">
24                                 <Setter Property="Fill" TargetName="Rectangle">
25                                     <Setter.Value>
26                                         <SolidColorBrush Color="White"></SolidColorBrush>
27                                     </Setter.Value>
28                                 </Setter>
29                                 <Setter Property="Foreground" Value="Black"></Setter>
30                             </Trigger>
31                         </ControlTemplate.Triggers>
32                     </ControlTemplate>
33                 </Setter.Value>
34             </Setter>
35         </Style>
36     </Window.Resources>
37 
38     <Grid  Height="Auto">
39         <Grid.RowDefinitions>
40             <RowDefinition Height="Auto"></RowDefinition>
41             <RowDefinition Height="Auto"></RowDefinition>
42             <RowDefinition Height="Auto" ></RowDefinition>
43         </Grid.RowDefinitions>
44         <DockPanel Grid.Row="0">
45             <Button DockPanel.Dock="Right" Style="{StaticResource ButtonStyle}" 
46                     Width="25" Height="25" Content="X" 
47                     HorizontalAlignment="Right" VerticalAlignment="Top" 
48                     Margin="3,3,3,3"
49                     Click="CloseWindow" >
50             </Button>
51         </DockPanel>
52         <TextBlock Padding="10,15,10,15" Grid.Row="1" x:Name="content" 
53                    Foreground="White" FontSize="18"
54                    MaxWidth="500" TextWrapping="Wrap"/>
55 
56         <StackPanel Orientation="Horizontal"  FlowDirection="RightToLeft"  Grid.Row="2">
57             <Button Content="確定" Width="80"   Click="CloseWindow" Height="30" Margin="10,0,0,0" ></Button>
58         </StackPanel>    
59     </Grid>
60 </Window>
View Code

  

其中,window 的屬性里WindowStyle="None",AllowsTransparency="True"是設置window無邊框的關鍵,WindowStartupLocation="CenterScreen",使視窗初始化時在屏幕正中央出現,Background="#AA000000",#AA000000是具有半透明的顏色,另外,由於消息框的大小是隨著內容的多少來變化的,所以並沒有設置視窗的長和寬,因此設置Window.SizeToContent="WidthAndHeight",為的是使消息框能自適應內容。

  另外,還要註意的是,因為window失去了邊框和它的頭部,所以是不能夠對它進行拖拽的,這就很彆扭了,所以我給MouseLeftButtonDown設置了一個DragWindow處理方法。

具體的cs代碼如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Windows;
 6 using System.Windows.Controls;
 7 using System.Windows.Data;
 8 using System.Windows.Documents;
 9 using System.Windows.Input;
10 using System.Windows.Media;
11 using System.Windows.Media.Imaging;
12 using System.Windows.Shapes;
13 
14 namespace MESBox
15 {
16     /// <summary>
17     /// MEGBox.xaml 的交互邏輯
18     /// </summary>
19     public partial class MEGBox : Window
20     {
21         private static MEGBox _Instance;
22         public static MEGBox Instance
23         {
24             get
25             {
26                 if (_Instance == null)
27                 {
28                     _Instance = new MEGBox();
29                 }
30                 return _Instance;
31             }
32         }
33         public MEGBox()
34         {
35             InitializeComponent();
36         }
37         public void Show(string content)
38         {
39             this.content.Text = "       " + content;
40             this.ShowDialog();
41         }    
42         private void DragWindow(object sender, MouseButtonEventArgs e)
43         {
44             this.DragMove();
45         }
46         public void CloseWindow(object sender, RoutedEventArgs args)
47         {
48             
49             this.Close();
50             _Instance = null;
51         }
52 
53     }
54 }
View Code

代碼簡單易懂,也不詳細說了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.參數化查詢模糊查詢 sql語句: create proc procegDataAp( @UserName nvarchar(50))asselect * from users where userName=@UserName 給參數賦值 1 <%@ Page Language="C#" Auto ...
  • 1.SQL註入:SQL註入攻擊是web應用程式的一種安全漏洞,可以將不安全的數據提交給運用程式,使應用程式在伺服器上執行不安全的sql命令。使用該攻擊可以輕鬆的登錄運用程式。 例如:該管理員賬號密碼為xiexun,該sql的正確語句應該為: 如果在沒有做任何處理的情況下,在登錄名文本框中輸入(xux ...
  • 常用快捷鍵 自動生成頭部註釋 代碼片段 NuGet Team Foundation 常用的VS快捷鍵 查看與設置快捷鍵 一般在菜單裡面我們直接就可以看到一些功能的快捷鍵。另外,可以依次通過 菜單欄-工具-選項-環境-鍵盤 中查看和設置對應功能的快捷鍵 推薦幾個我比較常用的快捷鍵 我用的是VS2015 ...
  • 1、頁面後臺代碼添加如下靜態變數: 2、在處理數據的開始,初始化total和startTime變數: 3、在處理數據過程中,不斷累加cur: 4、前端每隔200毫秒獲取進度: 5、後臺計算進度: 效果圖(文字錯了,不是“導入進度”,而是“數據處理進度:”): ...
  • 公司業務量比較大,接了很多項目,為了縮短開發周期老闆讓我牽頭搭建了一個敏捷開發框架。 我們主要的業務是做OA、CRM、ERP一類的管理系統,一個通用的後臺搭出來,再配合一些快速開發的組件開發效率能提高很多。 另外老闆一再強調要支持APP開發,一次開發能部署到安卓和IOS上。 作為開篇之作,先介紹一下 ...
  • 定製路由系統 路由系統是靈活可配置的,當然還可以通過下麵這兩種方式定製路由系統,來滿足其他需求。 1、 通過創建自定義的RouteBase實現; 2、 通過創建自定義路由處理程式實現。 創建自定義的RouteBase實現 創建自定義的RouteBase實現,需要實現一個RouteBase的派生類,而 ...
  • 同Winsock1相比,Winsock2最明顯的就是支持了Raw Socket套接字類型,使用Raw Socket,可把網卡設置成混雜模式,在這種模式下,我們可以收到網路上的IP包,當然包括目的不是本機的IP包,通過原始套接字,我們也可以更加自如地控制Windows下的多種協議,而且能夠對網路底層的 ...
  • 在上一篇文章中我們主要分析了ASP.NET Core預設依賴註入容器的存儲和解析,這一篇文章主要補充一下上一篇文章忽略的一些細節:有關服務回收的問題,即服務的生命周期問題。有關源碼可以去GitHub上找到。 這次的主角就是ServiceProvider一人,所有有關生命周期的源碼幾乎都集中在Serv ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...