这几天抽空在学习WPF,原本以为WPF与WinForm的主要区别只是在表现力(动画)方面,但真正了解学习WPF时,才发现其实在编码实现上WPF与WinForm也只能说是少部分相同(控件和窗体有着差不多的事件和属性),也感觉WPF有些实现(数据绑定、控件的使用)不是很好理解。本文主要是分享下,我从网上找的一个"WPF仿windows图片查看器"项目源码基础上学习所得,先看下截图:

  (一)主界面

WPF仿windows图片查看器(附源码)_第1张图片

  (二)图片预览界面

WPF仿windows图片查看器(附源码)_第2张图片

    主界面的界面代码,如下:

  1 "PhotoGallery.MainPage"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 Title="Photo Gallery" Loaded="Page_Loaded">
5
6 "shinyBrush" StartPoint="0,0" EndPoint="0,1">
7 "0" Color="Gray"/>
8 "0.3" Color="#FF222222"/>
9 "0.3" Color="Black"/>
10 "0.9" Color="Black"/>
11 "0.9" Color="#FF222222"/>
12 "1" Color="Gray"/>
13

14

15
16
17 "50"/>
18
19 "55"/>
20

21
22 "200"/>
23 "Auto"/>
24
25

26 "3" Fill="{StaticResource shinyBrush}"/>
27 "2" Grid.ColumnSpan="3" Fill="{StaticResource shinyBrush}"/>
28
29 "Transparent" Name="menu1" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.ColumnSpan="3" Foreground="White">
30 "_File" Foreground="White">
31 "favoritesMenu" Header="Add Current Folder to Fa_vorites" Click="favoritesMenu_Click" Foreground="Black" />
32 "deleteMenu" IsEnabled="False" Header="De_lete" Click="deleteMenu_Click" Foreground="Black" />
33 "renameMenu" IsEnabled="False" Header="Rena_me" Click="renameMenu_Click" Foreground="Black" />
34
35 "_Refresh" Click="refreshMenu_Click" Foreground="Black" />
36
37 "E_xit" Click="exitMenu_Click" Foreground="Black" />
38

39 "fixMenu" Foreground="White" IsEnabled="False" Click="fixMenu_Click" Header="Fi_x"/>
40 "printMenu" Foreground="White" Click="printMenu_Click" IsEnabled="False" Header="_Print"/>
41 "editMenu" Foreground="White" IsEnabled="False" Header="_Edit" Click="editMenu_Click" />
42

43
44 "treeView" Grid.Row="1" Background="AliceBlue" SelectedItemChanged="folders_SelectedItemChanged">
45 "favoritesItem" IsExpanded="True" Header="Favorites"/>
46 "foldersItem" Header="Folders"/>
47

48 "1" Grid.Column="1" ResizeBehavior="PreviousAndNext"/>
49 "pictureBox" Background="AliceBlue" SelectionChanged="pictureBox_SelectionChanged" Grid.Row="1" Grid.Column="2" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
50
51
52
53

54

55

56
57 "2" Grid.ColumnSpan="3">
58
59
60 "Auto"/>
61
62

63 "0" Orientation="Horizontal" HorizontalAlignment="Right">
64
67 "zoomPopup" MouseLeave="zoomPopup_MouseLeave" PlacementTarget="{Binding ElementName=zoomButton}" Placement="Center" StaysOpen="False">
68 "White">
69 "Black" BorderThickness="1">
70 "20" Orientation="Vertical" x:Name="zoomSlider" Value="3" Minimum="1" Maximum="10" Height="100" ValueChanged="zoomSlider_ValueChanged"/>
71

72

73

74
77

78 "1" Orientation="Horizontal" HorizontalAlignment="Center">
79
82
85
88

89 "2" Orientation="Horizontal" HorizontalAlignment="Left">
90
93
96
99

100

101

102

     对上面的代码说明如下:

    1.x:Class="PhotoGallery.MainPage" ——相当于WebForm中的CodeBehind属性,当前界面的后置类。

    2.
    ... ——相当于web中定义的一个样式(而以后的文章中会提到的资源词典(ResourceDictionary)文件相当于是一个样式表,可以在不同的界面中使用),名为shinyBrush的笔刷,可以在当前界面的任何控件上使用,如设置按钮的背景色等。

   3.
     
     
     
   

   
     
     
     
   
   ——Grid是一个类似于web中的table标签的表格控件, RowDefinitions意为行定义,这段代码就表示定义(创建)一个3行3列的表格。——表示在第三行有一块区域并跨越3列, Grid.Row对应的是行的索引。

   后台部分代码

 1   ///
2 /// 按比例放大
3 ///

4 ScaleTransform st = new ScaleTransform(3, 3);
5 object dummyNode = null;
6 Photos photos = new Photos();
7
8 #region Window Management
9
10 public MainPage()
11 {
12 InitializeComponent();
13 photos.ItemsUpdated += delegate { this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(Refresh)); };
14 Application.Current.Properties["favoritesItem"] = favoritesItem;
15 Application.Current.Properties["test_Info"] = DateTime.Now.ToString();
16 }

     Application.Current.Properties["test_Info"] = DateTime.Now.ToString(); ——其用法和作用,我目前理解为跟web中的Session类似,即在当前应用程序内的任何界面都可以访问获得的全局集合字典。

     最后,附上源码(源码你仔细看下应该基本上能明白)和一本wpf经典教程书,希望能给在学习WPF的朋友一些帮助。因为我也刚开始学,此文写的很简略,望大家多多包涵!

     PhotoGallery.rar

   wpf经典教程.pdf