说到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":
{
&