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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...