using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Controls;
using System.Windows.Shapes;
using System.Windows.Documents;
using System.Windows.Input;
namespace WindowTest
{
public class ApplicationTest : Application
{
//当进行关机等操作的时候,会触发这人事件。
protected override void OnSessionEnding(SessionEndingCancelEventArgs e)
{
base.OnSessionEnding(e);
MessageBoxResult result =
MessageBox.Show("Do you want to save your data?",
MainWindow.Title,
MessageBoxButton.YesNoCancel,
MessageBoxImage.Question,
MessageBoxResult.Yes);
e.Cancel = (result == MessageBoxResult.Cancel);
}
//Application开始运行时执行。
protected override void OnStartup(StartupEventArgs args)
{
base.OnStartup(args);
Window win = new Window();
win.Title = "Inherit the Application!";
win.Show();
}
}
class SimpleEllipse : FrameworkElement
{
/// <summary>
/// OnRender 方法可以被重写以将其他图形元素(未事先在逻辑树中定义)添加
/// 至所呈现的元素,如效果或装饰器。 DrawingContext 对象作为参数传递,
/// 该参数可以为绘制形状、文本、图像或视频提供方法。
/// Important
/// 调用此方法时,不直接使用此元素的呈现指令,而是将其保留供布局和绘制在以后异步使用。
/// </summary>
/// <param name="dc"></param>
protected override void OnRender(DrawingContext dc)
{
dc.DrawEllipse(Brushes.Blue,
new Pen(Brushes.Red, 24),
new Point(RenderSize.Width / 2, RenderSize.Height / 2),
RenderSize.Width / 2,
RenderSize.Height / 2);
}
}
public class WindowTest : Window
{
[STAThread]
public static void Main()
{
ApplicationTest app = new ApplicationTest();
app.ShutdownMode = ShutdownMode.OnMainWindowClose; //程序关闭模式
app.Run(new WindowTest());
}
public WindowTest()
{
//Properties
Title = "WPF Window class Test!"; //标题
ShowInTaskbar = true; //任务栏中是否显示
Width = 500; //宽度
Height = 400; //高度
Width = SystemParameters.PrimaryScreenWidth; //与屏幕一样宽
Height = SystemParameters.PrimaryScreenHeight; //与屏幕一样高
//工作区的同大小,最大化。
Width = SystemParameters.WorkArea.Width; //与工作区一样宽
Height = SystemParameters.WorkArea.Height; //与工作区一样高
Left = 100; //位置左
Top = 100; //位置上
//工作区的左上位
Left = SystemParameters.WorkArea.Left;
Top = SystemParameters.WorkArea.Top;
WindowStartupLocation = WindowStartupLocation.CenterScreen; //Window在工作区中间
ResizeMode = ResizeMode.CanResizeWithGrip; //此选项的功能与 CanResize 相同,
//但在窗口右下角添加了一个“大小调整手柄”。
WindowStyle = WindowStyle.SingleBorderWindow; //Window的样式,为三
WindowState = WindowState.Normal; //Window的状态。
Topmost = false; //总在最前否?
Background = new LinearGradientBrush(Colors.Black, Colors.Green, new Point(0, 0), new Point(1, 1)); //背景,Brush类
Foreground = Brushes.Red; //前景,Brush类
//RadialGradientBrush类运用
RadialGradientBrush tempBorderBrush = new RadialGradientBrush();
tempBorderBrush.Center = tempBorderBrush.GradientOrigin = new Point(0.5, 0.5); //中心点,与渐变的原的位置为窗口中心
tempBorderBrush.RadiusX = tempBorderBrush.RadiusY = 0.5;
tempBorderBrush.GradientStops.Add(new GradientStop(Colors.Black, 0)); //添加色变点
tempBorderBrush.GradientStops.Add(new GradientStop(Colors.Yellow, 0.5));
tempBorderBrush.GradientStops.Add(new GradientStop(Colors.Red, 1));
tempBorderBrush.SpreadMethod = GradientSpreadMethod.Repeat; //散布方式,
//边框
BorderBrush = tempBorderBrush; //边框,Brush类
BorderThickness = new Thickness(10); //边框的厚度
FontFamily = new FontFamily("Times New Roman"); //字体
FontSize = 48; //字体的太小48*(3/4)=36
FontStyle = FontStyles.Normal; //字体的样式,FontStyle.Normal for default
FontWeight = FontWeights.Normal; //字体的粗重
FontStretch = FontStretches.UltraExpanded;
//Content属性的处理
AddSomeObjectIntoContent();
SizeToContent = SizeToContent.Manual; //有内容了,所以现在可以安内容来变窗口的大小了。
}
//Events..
//鼠标的点下事件。
protected override void OnMouseDown(System.Windows.Input.MouseButtonEventArgs e)
{
base.OnMouseDown(e);
Title = "WPF Window class Test! ChangeButton:" +
e.ChangedButton.ToString() + " " + //哪个键被点了
e.ClickCount.ToString() + " " + //点鼠标的次数
e.OriginalSource + " " + //源
e.ButtonState + " " + //鼠标的状态
e.Timestamp + " " + //时间
e.GetPosition(this).ToString(); //点
e.Handled = false; //不让MouseDown的事件处理方法执行
}
protected override void OnTextInput(System.Windows.Input.TextCompositionEventArgs e)
{
base.OnTextInput(e);
//InputStringBuilderToContent();
//InpupStringToContent(e);
}
//Methods...
private void AddSomeObjectIntoContent()
{
//AddStringIntoContent();
//AddStringBuilderIntoContent();
//AddImageIntoContent();
//AddEllipseIntoContent();
//AddTextBlockIntoContent();
//AddShapeIntoContent();
Button btn = new Button();
//btn.Background = Brushes.Beige;
btn.Foreground = Brushes.Plum;
btn.BorderBrush = Brushes.Purple;
//btn.BorderThickness = new Thickness(50); //No effect
btn.Content = "_Click me!"; //_ is very important char for Button...
btn.Click += new RoutedEventHandler(btn_Click);
btn.Focus();
btn.IsDefault = true; //input Enter invoke the Click Event
btn.IsCancel = true; //input Escape invoke the Click Event
btn.Margin = new Thickness(96);
btn.HorizontalContentAlignment = HorizontalAlignment.Left;
btn.VerticalContentAlignment = VerticalAlignment.Top;
btn.Padding = new Thickness(96);
btn.HorizontalAlignment = HorizontalAlignment.Center ; //Stretch for default
btn.VerticalAlignment = VerticalAlignment.Center; //Stretch for default
//btn.Width = 96; //The less explicitly you set the sizes of controls, the happier you'll be.
//btn.Height = 96;
btn.FontFamily = new FontFamily("Times New Roman");
btn.FontSize = 96;
Content = btn;
}
void btn_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
btn.FontStyle = FontStyles.Italic;
this.Close();
}
private void AddShapeIntoContent()
{
SimpleEllipse ellipse = new SimpleEllipse();
ellipse.Width = ellipse.Height = 100;
Content = ellipse;
}
private void AddTextBlockIntoContent()
{
TextBlock txt = new TextBlock();
txt.FontSize = 32; // 24 points
txt.Inlines.Add("This is some "); //加入string
txt.Inlines.Add(new Italic(new Run("italic"))); //加入Inline类的子类。Intalic
txt.Inlines.Add(" text, \nand this is some ");
txt.Inlines.Add(new Bold(new Run("bold"))); //加入Inline类的子类。Bold
txt.Inlines.Add(" text, \nand let's cap it off with some ");
//加入Inline类的子类:Bold,可以想像一下这里用的是什么设计模式?Decorator
txt.Inlines.Add(new Hyperlink(new Underline(new Bold(new Italic(new Run("bold italic"))))));
txt.Inlines.Add(" text.");
txt.TextWrapping = TextWrapping.Wrap; //有边框
txt.HorizontalAlignment = HorizontalAlignment.Center; //中间
txt.VerticalAlignment = VerticalAlignment.Center;
Content = txt;
string strQuote = "To be, or not to be, that is the question";
string[] strWords = strQuote.Split(); //字符串分解
foreach (string str in strWords)
{
Run run = new Run(str);
run.Background = Brushes.Gray;
run.MouseDown += RunOnMouseDown;
txt.Inlines.Add(run);
txt.Inlines.Add(" ");
}
}
void RunOnMouseDown(object sender, MouseButtonEventArgs args)
{
Run run = sender as Run;
if (args.ChangedButton == MouseButton.Left)
run.FontStyle = run.FontStyle == FontStyles.Italic ? FontStyles.Normal : FontStyles.Italic;
if (args.ChangedButton == MouseButton.Right)
run.FontWeight = run.FontWeight == FontWeights.Bold ? FontWeights.Normal : FontWeights.Bold;
}
private void AddEllipseIntoContent()
{
Width = 600;
Height = 500;
Ellipse ellipse = new Ellipse();
ellipse.Fill = Brushes.Black; //这个椭圆中间添黑色
ellipse.StrokeThickness = 96; //线厚为1英寸
ellipse.Stroke = new LinearGradientBrush(Colors.CadetBlue, Colors.Chocolate, new Point(1, 0), new Point(0, 1)); //线为线性示放射
ellipse.Width = 400; //宽
ellipse.Height = 400; //高
ellipse.HorizontalAlignment = HorizontalAlignment.Stretch; //位置
ellipse.VerticalAlignment = VerticalAlignment.Stretch;
Content = ellipse;
}
private void AddImageIntoContent()
{
Width = 600;
Height = 400;
Uri uri = new Uri("http://www.google.com.hk/intl/zh-CN/images/logo_cn.png");
BitmapImage bitmap = new BitmapImage(uri);
Image img = new Image();
img.Source = bitmap; //位图原
img.Stretch = Stretch.Uniform; //Default,伸缩
img.StretchDirection = StretchDirection.Both; //全伸缩,(还小可缩,大可伸两个项)
img.HorizontalAlignment = HorizontalAlignment.Center; //水平位置为Center
img.VerticalAlignment = VerticalAlignment.Center; //垂直位置为Center
img.Margin = new Thickness(10); //与Border的各个方向的距离是50
img.Width = 600; //img的宽,看到窗口Width与img的Width是相等了,所以图片显示
//的区域是600-2*BorderThickness-2*img.Margin
img.Height = 400; //img的高,
img.Opacity = 0.5; //透明度
img.LayoutTransform = new RotateTransform(45);
Content = img;
}
private void AddStringBuilderIntoContent()
{
//StringBuilder.加入StringBuilder类型到Content中,注意OnTextInput方法中对这个Content的更新。
StringBuilder stb = new StringBuilder();
stb.Append("111111sdfjlasjdfl\n");
stb.Append("22222222sdfasljd\n");
Content = stb;
}
private void InputStringBuilderToContent()
{
//接收StringBuilder类型的Content。
StringBuilder stb = new StringBuilder();
stb = Content as StringBuilder;
if (stb != null)
{
stb.Append("333333333ldjfsdlfkjsldfjals\n");
Content = null; //这一句是必须有的,如果没有的话,系统会认为内容没有变化,
Content = stb;
}
}
private object AddStringIntoContent()
{
return Content = "Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
}
private void InpupStringToContent(System.Windows.Input.TextCompositionEventArgs e)
{
string str = Content as string;
str += e.Text;
Content = str;
}
}
}