说到wpf,我之前以为它会很难,不过学了一点知识之后,我觉得和winform差不多,最大的差别就是wpf前台布局是使用相当于XML的语言来编写的,不过学了一下也就懂了。
下面就是练习的两个简单的例子:
例子1,生成10行10列,随机放图片:
前台布局:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Icon="/WpfApplication1;component/Images/logo.ico" Loaded="Window_Loaded">
<Grid>
<!--<StackPanel>
<Button Width="70px" Content="btn1" Name="btn1"></Button>
<ProgressBar Margin="10px " Height="13" Minimum="0" Maximum="100" Value="70" Name="progressBar1" Width="284" />
</StackPanel>-->
<Grid Name="grid1">
<!--行和列定义-->
<!--<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="1行1列" Grid.Row="1" Grid.Column="1" Margin="0,0,44,68"></Button>-->
</Grid>
</Grid>
</Window>
后台代码:
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (sender is Button)
{
Button bt = sender as Button;
MessageBox.Show(bt.Name);
}
else
{
MessageBox.Show("其他");
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 10; i++)
{
ColumnDefinition colum=new ColumnDefinition();
grid1.ColumnDefinitions.Add(colum);
RowDefinition row = new RowDefinition();
grid1.RowDefinitions.Add(row);
}
Random rd = new Random();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
//Button btn = new Button();
//btn.Content = i+","+j;
//Grid.SetRow(btn, i);
//Grid.SetColumn(btn, j);
//grid1.Children.Add(btn);
Image img = new Image();
img.Source = new BitmapImage(new Uri(string.Format("Images/{0}.gif",rd.Next(1,11)),UriKind.Relative));
Grid.SetRow(img, i);
Grid.SetColumn(img, j);
grid1.Children.Add(img);
}
}
}
}
例子2 菜单和工具栏控件的使用:
前台布局:
<Window x:Class="WpfControl1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="主窗口" Height="350" Width="525" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" Icon="/WpfControl1;component/Images/logo.ico">
<Grid>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="文件">
<MenuItem Header="打开" Name="MI_Open" Click="MI_Open_Click">
<MenuItem Header="1.txt" Click="MI_Open_Click"></MenuItem>
<MenuItem Header="2.txt" Click="MI_Open_Click"></MenuItem>
<MenuItem Header="3.txt" Click="MI_Open_Click"></MenuItem>
<MenuItem Header="选择文件…" Name="MI_OpenFile" Click="MI_Open_Click"></MenuItem>
</MenuItem>
<MenuItem Header="保存" Name="MI_SaveFile" Click="MI_Open_Click"></MenuItem>
</MenuItem>
<MenuItem Header="编辑"></MenuItem>
</Menu>
<ToolBar DockPanel.Dock="Top">
<Button Content="新建"></Button>
<Button Content="打开" Name="btnOpenWin" Click="btnOpenWin_Click"></Button>
<CheckBox Content="是否选择"></CheckBox>
</ToolBar>
<TextBox DockPanel.Dock="Bottom" TextWrapping="Wrap" Name="txtContent"></TextBox>
</DockPanel>
</Grid>
</Window>
后台代码:
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private string FilePath="";
private void MI_Open_Click(object sender, RoutedEventArgs e)
{
if (sender is MenuItem)
{
MenuItem mi = sender as MenuItem;
//MessageBox.Show(mi.Name);
switch (mi.Name)
{
case "MI_OpenFile":
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本文件(aspx,html,txt)|*.txt;*.html;*.aspx|所有文件|*.*";
ofd.FilterIndex = 0;
ofd.Multiselect = true;
ofd.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
if(ofd.ShowDialog()==true)
{
// MessageBox.Show(ofd.FileName);
FilePath = ofd.FileName;
txtContent.Text = System.IO.File.ReadAllText(FilePath,Encoding.Default);
}
}
break;
case "MI_SaveFile":
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "文本文件(aspx,html,txt)|*.txt;*.html;*.aspx|所有文件|*.*";
sfd.FilterIndex = 0;
if (FilePath != "")
{
sfd.InitialDirectory = System.IO.Path.GetFullPath(FilePath);
}
else
{
sfd.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
}
if (sfd.ShowDialog() == true)
{
System.IO.File.WriteAllText(sfd.FileName, txtContent.Text,Encoding.Default);
}
}
break;
default:
break;
}
}
else
{
MessageBox.Show("不是菜单项。");
}
}
//打开一个新窗口,与winform一样
private void btnOpenWin_Click(object sender, RoutedEventArgs e)
{
//SecondWin win2 = new SecondWin("第二窗口");
//win2.ShowActivated = true;
//win2.WindowStartupLocation = WindowStartupLocation.CenterScreen;
//bool? result=win2.ShowDialog();
//if (result != null)
//{
// MessageBox.Show(result.ToString());
//}
}
}