1.DockPanel面板
class="brush:csharp;collapse:true;;gutter:true;">using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace LY.DockAroundTheBlock { class DockAroundTheBlock:Window { [STAThread] public static void Main() { new Application().Run(new DockAroundTheBlock()); } public DockAroundTheBlock() { Title = "Dock Around The Block"; DockPanel dock = new DockPanel(); //LastChildFill属性默认值为true //dock.LastChildFill = false; Content = dock; for (int i = 0; i < 17; i++) { Button btn = new Button(); btn.Content = "Button No. " + (i + 1); dock.Children.Add(btn); //将数值直接转换为枚举 //以下两种方法都可以 //btn.SetValue(DockPanel.DockProperty, (Dock)(i % 4)); DockPanel.SetDock(btn, (Dock)(i % 4)); } } } }
2.Grid面板
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace LY.CalculateYourLife { class CalculateYourLife : Window { TextBox txtboxBegin, txtboxEnd; Label lblLifeYears; [STAThread] public static void Main() { Application app = new Application(); app.Run(new CalculateYourLife()); } public CalculateYourLife() { Title = "Calculate Your Life"; SizeToContent = SizeToContent.WidthAndHeight; ResizeMode = ResizeMode.CanMinimize; Grid grid = new Grid(); Content = grid; //显示Grid面板的网格线 grid.ShowGridLines = true; // 行和列的定义 for (int i = 0; i < 3; i++) { //RowDefinitions是RowDefinition的集合 //用于定义网格的行 RowDefinition rowdef = new RowDefinition(); /* * GridLength是结构体,可以用GridLength.Auto静态属性定义行的高度,如果 *用GridLength.Pixel(固定大小)或GridLength.Star(可用空间百分比)枚举 *也可以用new GridLength()构造函数,来指定固定大小或分配权重 *如果在new GridLength()构造函数中用GridLength.Auto枚举,则会忽略数值 */ rowdef.Height = GridLength.Auto;//根据内容自动设定高度 //rowdef.Height = new GridLength(100, GridUnitType.Pixel); //Grid会将所有GridUnitType.Star枚举值加起来得到总和,然后 //让每个值除以总和,以决定空间分配比 //rowdef.Height = new GridLength(20, GridUnitType.Star); //如果用无参数构造函数,则默认为GridUnitType.Star,权重值为1 //rowdef.Height = new GridLength(); grid.RowDefinitions.Add(rowdef); } for (int i = 0; i < 2; i++) { ColumnDefinition coldef = new ColumnDefinition(); coldef.Width = GridLength.Auto; grid.ColumnDefinitions.Add(coldef); } // First label. Label lbl = new Label(); lbl.Content = "Begin Date: "; grid.Children.Add(lbl); //将控件放到Grid面板中 Grid.SetRow(lbl, 0); Grid.SetColumn(lbl, 0); // First TextBox. txtboxBegin = new TextBox(); txtboxBegin.Text = new DateTime(1980, 1, 1).ToShortDateString(); txtboxBegin.TextChanged += TextBoxOnTextChanged; grid.Children.Add(txtboxBegin); Grid.SetRow(txtboxBegin, 0); Grid.SetColumn(txtboxBegin, 1); // Second label. lbl = new Label(); lbl.Content = "End Date: "; grid.Children.Add(lbl); Grid.SetRow(lbl, 1); Grid.SetColumn(lbl, 0); // Second TextBox. txtboxEnd = new TextBox(); txtboxEnd.TextChanged += TextBoxOnTextChanged; grid.Children.Add(txtboxEnd); Grid.SetRow(txtboxEnd, 1); Grid.SetColumn(txtboxEnd, 1); // Third label. lbl = new Label(); lbl.Content = "Life Years: "; grid.Children.Add(lbl); Grid.SetRow(lbl, 2); Grid.SetColumn(lbl, 0); // Label for calculated result. lblLifeYears = new Label(); grid.Children.Add(lblLifeYears); Grid.SetRow(lblLifeYears, 2); Grid.SetColumn(lblLifeYears, 1); // Set margin for everybody. Thickness thick = new Thickness(5); grid.Margin = thick; //遍历控件 foreach (Control ctrl in grid.Children) ctrl.Margin = thick; txtboxBegin.Focus(); txtboxEnd.Text = DateTime.Now.ToShortDateString(); } void TextBoxOnTextChanged(object sender, TextChangedEventArgs args) { DateTime dtBeg, dtEnd; if (DateTime.TryParse(txtboxBegin.Text, out dtBeg) && DateTime.TryParse(txtboxEnd.Text, out dtEnd)) { int iYears = dtEnd.Year - dtBeg.Year; int iMonths = dtEnd.Month - dtBeg.Month; int iDays = dtEnd.Day - dtBeg.Day; if (iDays < 0) { iDays += DateTime.DaysInMonth(dtEnd.Year, 1 + (dtEnd.Month + 10) % 12); iMonths -= 1; } if (iMonths < 0) { iMonths += 12; iYears -= 1; } lblLifeYears.Content = String.Format("{0} year{1}, {2} month{3}, {4} day{5}", iYears, iYears == 1 ? "" : "s", iMonths, iMonths == 1 ? "" : "s", iDays, iDays == 1 ? "" : "s"); } else { lblLifeYears.Content = ""; } } } }
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace LY.EnterTheGrid { public class EnterTheGrid : Window { [STAThread] public static void Main() { Application app = new Application(); app.Run(new EnterTheGrid()); } public EnterTheGrid() { Title = "Enter the Grid"; MinWidth = 300; SizeToContent = SizeToContent.WidthAndHeight; //新建一个StackPanel StackPanel stack = new StackPanel(); Content = stack; //新建Grid面板,并且加入到StackPanel Grid grid1 = new Grid(); grid1.Margin = new Thickness(5); stack.Children.Add(grid1); //设定行 for (int i = 0; i < 5; i++) { RowDefinition rowdef = new RowDefinition(); rowdef.Height = GridLength.Auto; grid1.RowDefinitions.Add(rowdef); } //设定列 ColumnDefinition coldef = new ColumnDefinition(); coldef.Width = GridLength.Auto; grid1.ColumnDefinitions.Add(coldef); coldef = new ColumnDefinition(); //第二列会随着边框拉大而自动变大,因为其GridUnitType为Star coldef.Width = new GridLength(100, GridUnitType.Star); grid1.ColumnDefinitions.Add(coldef); //创建labels控件 string[] strLabels = { "_First name:", "_Last name:", "_Social security number:", "_Credit card number:", "_Other personal stuff:" }; for(int i = 0; i < strLabels.Length; i++) { Label lbl = new Label(); lbl.Content = strLabels[i]; lbl.VerticalContentAlignment = VerticalAlignment.Center; grid1.Children.Add(lbl); Grid.SetRow(lbl, i); Grid.SetColumn(lbl, 0); TextBox txtbox = new TextBox(); txtbox.Margin = new Thickness(5); grid1.Children.Add(txtbox); Grid.SetRow(txtbox, i); Grid.SetColumn(txtbox, 1); } //再新建一个Grid面板,并且加入到StackPanel Grid grid2 = new Grid(); grid2.Margin = new Thickness(10); stack.Children.Add(grid2); // 因为grid2只需要有一行,因此不用定义行 // 默认方式下是Star枚举,权重值为1 grid2.ColumnDefinitions.Add(new ColumnDefinition()); grid2.ColumnDefinitions.Add(new ColumnDefinition()); grid2.ColumnDefinitions.Add(new ColumnDefinition()); grid2.ShowGridLines = true; //加入按钮 Button btn = new Button(); btn.Content = "Submit"; btn.HorizontalAlignment = HorizontalAlignment.Center; btn.IsDefault = true; btn.Click += delegate { Close(); }; grid2.Children.Add(btn); // 默认情况下行和列都是0 Grid.SetColumnSpan(btn, 2); // 跨两个列 btn = new Button(); btn.Content = "Cancel"; btn.HorizontalAlignment = HorizontalAlignment.Center; btn.IsCancel = true; btn.Click += delegate { Close(); }; grid2.Children.Add(btn); Grid.SetColumn(btn, 2); //默认行是0. //设定激活控件 (stack.Children[0] as Panel).Children[1].Focus(); } } }