您的位置:首页 > 其它

WPF and Silverlight 学习笔记(六):WPF窗体

2009-04-10 11:09 363 查看

一、窗体类

在Visual Studio和Expression Blend中,自定义的窗体均继承System.Windows.Window类(类型化窗体)。定义的窗体由两部分组成:

1、XAML文件

1: <Window


2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


4:     x:Class="WpfWindow.BasicWindow"


5:     x:Name="Window"


6:     Title="BasicWindow"


7:     Width="300" Height="200">


8:     <Canvas>


9:         <Button x:Name="btnMessage" Width="79" Height="24" Content="OK"


10:         Canvas.Left="172" Canvas.Top="93" Click="btnMessage_Click"/>


11:         <TextBox x:Name="txtValue" Width="215" Height="25"


12:         Canvas.Left="36" Canvas.Top="48" Text="" TextWrapping="Wrap"/>


13:     </Canvas>


14: </Window>


2、后台代码文件

1: using System;


2: using System.Windows;


3: 


4: namespace WpfWindow


5: {


6:     public partial class BasicWindow : Window


7:     {


8:         public BasicWindow()


9:         {


10:             this.InitializeComponent();


11:         }


12: 


13:         private void btnMessage_Click(object sender, System.Windows.RoutedEventArgs e)


14:         {


15:             txtValue.Text = "Hello World";


16:         }


17:     }


18: }


也可以将后台代码放在XAML文件中,上面的例子可以改写为:

1: <Window


2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


4:     x:Class="WpfWindow.BasicWindow"


5:     x:Name="Window"


6:     Title="BasicWindow"


7:     Width="300" Height="200">


8:     <Canvas>


9:         <Button x:Name="btnMessage" Width="79" Height="24" Content="OK"


10:         Canvas.Left="172" Canvas.Top="93" Click="btnMessage_Click"/>


11:         <x:Code><![CDATA[


12:             void btnMessage_Click(object sender, System.Windows.RoutedEventArgs e)


13:             {


14:                 txtValue.Text = "Hello World";


15:             }


16:         ]]>


17:         </x:Code>


18:         <TextBox x:Name="txtValue" Width="215" Height="25"


19:         Canvas.Left="36" Canvas.Top="48" Text="" TextWrapping="Wrap"/>


20:     </Canvas>


21: </Window>


二、窗体的生存周期

1、显示窗体

构造方法

Show()、ShowDialog()方法:Show()方法显示非模态窗口,ShowDialog()方法显示模态窗口

Loaded事件:窗体第一次Show()或ShowDialog()时引发的事件,通常在此事件中加载窗体的初始化数据

2、关闭窗体

Close()方法:关闭窗体,并释放窗体的资源

Closing事件、Closed事件:关闭时、关闭后引发的事件,通常在Closing事件中提示用户是否退出。

3、窗体的激活

Activate()方法:激活某窗体

Activated、Deactivated事件:当窗体激动、失去焦点时引发的事件

4、窗体的生存周期





示例程序:

在窗体载入时显示当前日期,并开始播放媒体

当窗体失去焦点时暂停播放媒体

当窗体重新获得焦点时继承播放窗体

当点击窗体的关闭按钮时,询问用户是否退出应用程序

XAML文件:

1: <Window x:Class="WpfWindow.WindowLifeCycle"


2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


4:     Title="WindowLifeCycle" Height="200" Width="300"


5:         Loaded="Window_Loaded"


6:         Activated="Window_Activated"


7:         Deactivated="Window_Deactivated"


8:         Closing="Window_Closing">


9:     <Canvas>


10:         <TextBlock Canvas.Right="15" Canvas.Bottom="15" Height="21" Name="txtDate"/>


11:         <MediaElement Canvas.Left="89" Canvas.Top="12" Height="100" Width="100"


12:                       Name="myMedia" Source="numbers.wmv"


13:                       Stretch="Fill" LoadedBehavior="Manual" />


14:     </Canvas>


15: </Window>


代码文件:

1: using System;


2: using System.Windows;


3: 


4: namespace WpfWindow


5: {


6:     public partial class WindowLifeCycle : Window


7:     {


8:         public WindowLifeCycle()


9:         {


10:             InitializeComponent();


11:         }


12: 


13:         // 开关变量,判断是否正在播放媒体


14:         private bool isPlaying;


15: 


16:         private void Window_Loaded(object sender, RoutedEventArgs e)


17:         {


18:             // 窗体加载时,显示当前日期及开始播放媒体


19:             txtDate.Text = DateTime.Now.ToString("yyyy-MM-dd");


20: 


21:             myMedia.Play();


22:             isPlaying = true;


23:         }


24: 


25:         private void Window_Activated(object sender, EventArgs e)


26:         {


27:             // 如果窗体被激活,则继承播放媒体


28:             if (!isPlaying)


29:             {


30:                 myMedia.Play();


31:                 isPlaying = true;


32:             }


33:         }


34: 


35:         private void Window_Deactivated(object sender, EventArgs e)


36:         {


37:             // 如果窗体失去焦点,则暂停播放媒体


38:             if (isPlaying)


39:             {


40:                 myMedia.Pause();


41:                 isPlaying = false;


42:             }


43:         }


44: 


45:         private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)


46:         {


47:             // 点击窗体的“关闭”按钮,询问用户是否退出程序


48: 


49:             string message = "Quit the application?";


50:             string title = "System Information";


51:             MessageBoxButton button = MessageBoxButton.OKCancel;


52:             MessageBoxImage img = MessageBoxImage.Question;


53: 


54:             MessageBoxResult result = MessageBox.Show(


55:                 message, title, button, img);


56: 


57:             if (result == MessageBoxResult.Cancel)


58:             {


59:                 e.Cancel = true;    // 取消退出


60:             }


61:         }


62:     }


63: }


三、其他窗体相关的属性、方法、事件

WPF窗体的详细的属性、方法、事件请参考MSDN,有很多的属性、方法、事件与Windows应用程序中System.Windows.Forms.Form类相同或近似,其中常用的一些属性、方法、事件有:

窗体边框模式(WindowStyle属性)和是否允许更改窗体大小(ResizeMode属性)

窗体启动位置(WindowStartupLocation属性)和启动状态(WindowState属性)

窗体标题(Title属性)

始终在最前(TopMost属性)

是否显示在任务栏(ShowInTaskbar)

四、定义异形窗体

使用异形窗体,可以将窗体的背景设置为透明,边框设置为空,然后利用控件做出异形的窗体,例如:

XAML:

1: <Window x:Class="WpfWindow.CustomerWindow"


2:     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"


3:     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"


4:     Title="NonRectangularWindowSample" SizeToContent="WidthAndHeight"


5:     MouseLeftButtonDown="NonRectangularWindow_MouseLeftButtonDown"


6:     WindowStyle="None"


7:     AllowsTransparency="True"


8:     Background="Transparent">


9:     <Canvas Width="200" Height="200" >


10:         <Path Stroke="DarkGray" StrokeThickness="2">


11:             <Path.Fill>


12:                 <LinearGradientBrush StartPoint="0.2,0" EndPoint="0.8,1" >


13:                     <GradientStop Color="White"  Offset="0"></GradientStop>


14:                     <GradientStop Color="White"  Offset="0.45"></GradientStop>


15:                     <GradientStop Color="LightBlue" Offset="0.9"></GradientStop>


16:                     <GradientStop Color="Gray" Offset="1"></GradientStop>


17:                 </LinearGradientBrush>


18:             </Path.Fill>


19:             <Path.Data>


20:                 <PathGeometry>


21:                     <PathFigure StartPoint="40,20" IsClosed="True">


22:                         <LineSegment Point="160,20"></LineSegment>


23:                         <ArcSegment Point="180,40" Size="20,20" SweepDirection="Clockwise"></ArcSegment>


24:                         <LineSegment Point="180,80"></LineSegment>


25:                         <ArcSegment Point="160,100" Size="20,20" SweepDirection="Clockwise"></ArcSegment>


26:                         <LineSegment Point="90,100"></LineSegment>


27:                         <LineSegment Point="90,150"></LineSegment>


28:                         <LineSegment Point="60,100"></LineSegment>


29:                         <LineSegment Point="40,100"></LineSegment>


30:                         <ArcSegment Point="20,80" Size="20,20" SweepDirection="Clockwise"></ArcSegment>


31:                         <LineSegment Point="20,40"></LineSegment>


32:                         <ArcSegment Point="40,20" Size="20,20" SweepDirection="Clockwise"></ArcSegment>


33:                     </PathFigure>


34:                 </PathGeometry>


35:             </Path.Data>


36:         </Path>


37:         <Label Width="200" Height="120" FontSize="15" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">Drag Me</Label>


38:         <Button Canvas.Left="155" Canvas.Top="30" Click="closeButtonRectangle_Click">


39:             <Button.Template>


40:                 <ControlTemplate>


41:                     <Canvas>


42:                         <Rectangle Width="15" Height="15" Stroke="Black" RadiusX="3" RadiusY="3">


43:                             <Rectangle.Fill>


44:                                 <SolidColorBrush x:Name="myAnimatedBrush" Color="Red" />


45:                             </Rectangle.Fill>


46:                         </Rectangle>


47:                         <Line X1="3" Y1="3" X2="12" Y2="12" Stroke="White" StrokeThickness="2"></Line>


48:                         <Line X1="12" Y1="3" X2="3" Y2="12" Stroke="White" StrokeThickness="2"></Line>


49:                     </Canvas>


50:                 </ControlTemplate>


51:             </Button.Template>


52:         </Button>


53:     </Canvas>


54: </Window>


代码文件:

1: using System.Windows;


2: using System.Windows.Input;


3: 


4: namespace WpfWindow


5: {


6:     public partial class CustomerWindow : Window


7:     {


8:         public CustomerWindow()


9:         {


10:             InitializeComponent();


11:         }


12: 


13:         void NonRectangularWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)


14:         {


15:             this.DragMove();


16:         }


17: 


18:         void closeButtonRectangle_Click(object sender, RoutedEventArgs e)


19:         {


20:             this.Close();


21:         }


22:     }


23: }


 



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐