Wpf 系統異常提示框
原始碼:
wpf頁:
<Window x:Class="Wpf.MessageBox1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="420" Width="350"
MouseDown="Window_MouseDown"
Opacity="{Binding Opacity}"
Background="{x:Null}"
WindowState="{Binding State,Mode=TwoWay}"
WindowStyle="None" AllowsTransparency="True">
<Window.Resources>
<Style x:Key="buttonstyle_s1" TargetType="Button">
<Setter Property="Foreground" Value="Black"></Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>
</Style>
<!--button按鈕樣式-->
<ControlTemplate x:Key="CornerButton" TargetType="{x:Type Button}">
<Border BorderBrush="#838187" BorderThickness="1" CornerRadius="5" Background="#F6F5F3">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
<ControlTemplate x:Key="CornerButton1" TargetType="{x:Type Button}">
<Border BorderBrush="#ECE9D8" BorderThickness="1" CornerRadius="2" Background="#F6F5F3">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.5" />
<RowDefinition Height="30" />
<RowDefinition Height="100" />
<RowDefinition Height="5" />
<RowDefinition Height="*" />
<RowDefinition Height="15" />
<RowDefinition Height="0.1" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Grid Grid.Row="0" Grid.ColumnSpan="2" Background="Brown"></Grid>
<Grid Grid.Row="1" Grid.ColumnSpan="2" Background="#7B9CE3">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="30"/>
</Grid.ColumnDefinitions>
<TextBlock Text="系統提示!" Margin="10,8,0,0" Grid.Row="0" Grid.Column="0" FontSize="12"
FontWeight="Bold"></TextBlock>
<Button Content="X" Grid.Row="0" Height="18" Width="18" Grid.Column="1" Template="{StaticResource CornerButton1}"
Style="{StaticResource ResourceKey=buttonstyle_s1}"
FontSize="12"
Background="Transparent"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Command="{Binding ErrorMessageCloseCommand}">
</Button>
</Grid>
<Grid Grid.Row="2" Grid.ColumnSpan="2" Background="#ECE9D8">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="20" />
<RowDefinition Height="10" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="55"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="55"/>
<ColumnDefinition Width="15"/>
</Grid.ColumnDefinitions>
<Image Grid.Row="0" Grid.Column="0" Source="Image\Achtung.jpg" Height="40" Width="40" Margin="20,0,0,0"></Image>
<TextBlock Text="{Binding Message}"
Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="15"
FontWeight="Bold"/>
<Button Content="詳情" Template="{StaticResource CornerButton}" Grid.Row="1" Grid.Column="2" Command="{Binding IsVisibilityDetailCommand}"></Button>
<Button Content="確定" Template="{StaticResource CornerButton}" Grid.Row="1" Grid.Column="4" Command="{Binding ErrorMessageCloseCommand}"></Button>
</Grid>
<Grid Grid.Row="3" Opacity="0.2" Grid.ColumnSpan="2">
<Border Background="Red" Height="Auto"/>
</Grid>
<Grid Grid.Row="4" Grid.ColumnSpan="3" Background="#ECE9D8" Visibility="{Binding IsVisibility,Mode=TwoWay}">
<Grid.RowDefinitions>
<RowDefinition Height="10"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="40"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
</Grid.ColumnDefinitions>
<TextBlock Text="View:" Margin="0,12,0,0" Height="30" Grid.Row="1" Grid.Column="1" />
<TextBox Text="{Binding View}" Height="30" Grid.Row="1" Grid.Column="2" />
<TextBlock Text="ViewModel:" Height="30" Margin="0,12,0,0" Grid.Row="2" Grid.Column="1"/>
<TextBox Text="{Binding ViewModel}" Height="30" Grid.Row="2" Grid.Column="2" />
<TextBlock Text="Method:" Margin="0,12,0,0" Height="30" Grid.Row="3" Grid.Column="1"/>
<TextBox Text="{Binding Method}" Height="30" Grid.Row="3" Grid.Column="2" />
<TextBlock Text="Exception:" Height="30" Grid.Row="4" Grid.Column="1"/>
<TextBox
ScrollViewer.CanContentScroll="True" VerticalScrollBarVisibility="Visible"
AcceptsReturn="True"
Text="{Binding ExceptionString}"
HorizontalAlignment="Stretch"
Grid.Row="4" Grid.Column="2"/>
</Grid>
<Grid Grid.Row="5" Background="#ECE9D8" Grid.ColumnSpan="2" Visibility="{Binding IsVisibility,Mode=TwoWay}">
<Border Name="ResizeBottomRight" MouseMove="ResizePressed"
MouseDown="ResizePressed" Height="15" Width="15"
HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,3,3" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="88.182"/>
<TranslateTransform/>
</TransformGroup>
</Border.RenderTransform>
<Border.Background>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing Geometry="M96,128 L896,928 96,128 z M352,384 L128,160 172.19048,160 352,160 352,384 z M608,640 L384,416 608,416 608,640 z M608,384 L384,384 384,160 608,160 608,384 z M864,896 L640,672 864,672 864,896 z M864,640 L640,640 640,416 864,416 864,640 z M864,384 L640,384 640,160 864,160 864,384 z" Brush="#888888"></GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Border.Background>
</Border>
</Grid>
<Grid Grid.Row="6" Grid.ColumnSpan="2" Background="Brown" Visibility="{Binding IsVisibility,Mode=TwoWay}"></Grid>
</Grid>
</Window>
頁面後臺:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace Wpf
{
/// <summary>
/// MessageBox1.xaml 的互動邏輯
/// </summary>
public partial class MessageBox1 : Window
{
public MessageBox1()
{
InitializeComponent();
//執行拖拽
this.SourceInitialized += delegate(object sender, EventArgs e)
{
this._HwndSource = PresentationSource.FromVisual((Visual)sender) as HwndSource;
};
//滑鼠移入到邊緣收縮
this.MouseMove += new MouseEventHandler(Window_MouseMove);
}
/// <summary>
/// 移動視窗
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
DragMove();
}
}
/// <summary>
/// 初始化窗體可以縮放大小
/// </summary>
private const int WM_SYSCOMMAND = 0x112;
private HwndSource _HwndSource;
private Dictionary<ResizeDirection, Cursor> cursors = new Dictionary<ResizeDirection, Cursor>
{
{ResizeDirection.BottomRight, Cursors.SizeNWSE},
};
private enum ResizeDirection
{
BottomRight = 8,
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
/// <summary>
/// 移動滑鼠事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Window_MouseMove(object sender, MouseEventArgs e)
{
if (Mouse.LeftButton != MouseButtonState.Pressed)
{
FrameworkElement element = e.OriginalSource as FrameworkElement;
if (element != null && !element.Name.Contains("Resize"))
this.Cursor = Cursors.Arrow;
}
}
/// <summary>
/// 調整壓
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ResizePressed(object sender, MouseEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
ResizeDirection direction = (ResizeDirection)Enum.Parse(typeof(ResizeDirection), element.Name.Replace("Resize", ""));
this.Cursor = cursors[direction];
if (e.LeftButton == MouseButtonState.Pressed)
ResizeWindow(direction);
}
/// <summary>
/// 調整視窗
/// </summary>
/// <param name="direction"></param>
private void ResizeWindow(ResizeDirection direction)
{
SendMessage(_HwndSource.Handle, WM_SYSCOMMAND, (IntPtr)(61440 + direction), IntPtr.Zero);
}
}
}