1.
<Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.Background> <LinearGradientBrush> <LinearGradientBrush.GradientStops> <GradientStop Offset="0.00" Color="Red" /> <GradientStop Offset="0.50" Color="Indigo" /> <GradientStop Offset="1.00" Color="Violet" /> </LinearGradientBrush.GradientStops> </LinearGradientBrush> </Grid.Background> </Grid>
2.
public class Window1 : Window { private Button button1; public Window1(string xamlFile) { InitializeComponent(xamlFile); } private void InitializeComponent(string xamlFile) { // Configure the form. this.Width = this.Height = 285; this.Left = this.Top = 100; this.Title = "Dynamically Loaded XAML"; // Get the XAML content from an external file. DependencyObject rootElement; using (FileStream fs = new FileStream(xamlFile, FileMode.Open)) { rootElement = (DependencyObject)XamlReader.Load(fs); } // Insert the markup into this window. this.Content = rootElement; // Find the control with the appropriate name. //button1 = (Button)LogicalTreeHelper.FindLogicalNode(rootElement, "button1"); FrameworkElement frameworkElement = (FrameworkElement)rootElement; button1 = (Button)frameworkElement.FindName("button1"); // Wire up the event handler. button1.Click += new RoutedEventHandler(button1_Click); } private void button1_Click(object sender, RoutedEventArgs e) { button1.Content = "Thank you."; } }
//调用
public class Program : Application { [STAThread()] static void Main() { Program app = new Program(); app.ShutdownMode = ShutdownMode.OnLastWindowClose; Window1 window1 = new Window1("Window1.xaml"); window1.Show(); app.Run(); } }
3.
//stackpanel的布局
//stackpanel的布局 stackPanel1.Orientation = Orientation.Horizontal; stackPanel1.Orientation = Orientation.Vertical;
4.
//WrapPanel 相当于css中的浮动效果 <WrapPanel Margin="3"> <Button VerticalAlignment="Top">Top Button</Button> <Button MinHeight="60">Tall Button 2</Button> <Button VerticalAlignment="Bottom">Bottom Button</Button> <Button>Stretch Button</Button> <Button VerticalAlignment="Center">Centered Button</Button> </WrapPanel>
5.
// DockPanel <DockPanel LastChildFill="True"> <Button DockPanel.Dock="Top">A Stretched Top Button</Button> <Button DockPanel.Dock="Top" HorizontalAlignment="Center">A Centered Top Button</Button> <Button DockPanel.Dock="Top" HorizontalAlignment="Left">A Left-Aligned Top Button</Button> <Button DockPanel.Dock="Bottom">Bottom Button</Button> <Button DockPanel.Dock="Left">Left Button</Button> <Button DockPanel.Dock="Right">Right Button</Button> <Button >Remaining Space</Button> </DockPanel>
6.
//网格布局Grid
Grid是以表格形式组织控件的一种布局方式,与Java AWT中 的GridLayout类似,但区别在于
WPF中的Grid的每一个单元格中可以放置 多个控件,但控件可能会层叠在一起
WPF中的Grid支持单元格的合并,类 似于HTML中的table td中的rowspan和colspan
Grid中的行和列可以自定 义高度(Height)和宽度(Width)
在设置高度和宽度时可以采用两种写 法:
1)Height=”60”:不加“星号”表示固定 的高度
2)Height=”60*”:加“星号”表示 “加权”的高度,在调整窗体大小时,此高度或宽度会按窗体大小改
//网格布局 <Grid ShowGridLines="True"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Button Grid.Row="0" Grid.Column="0">Top Left</Button> <Button Grid.Row="0" Grid.Column="1">Middle Left</Button> <Button Grid.Row="1" Grid.Column="2">Bottom Right</Button> <Button Grid.Row="1" Grid.Column="1">Bottom Middle</Button> </Grid>
7.
//UseLayoutRounding 布局舍入
//UseLayoutRounding 布局舍入 //Grid宽度100,分3列显示,那么每一列的宽度33.3333 //应用UseLayoutRounding="True"后,有一列宽度会变为34,其余为33达到舍入效果! //页面自适应时,例如改变窗口大小时,控件会有抖动问题,参考此属性,即可解决! <Grid x:Name="LayoutRoot" Background="White" Width="100"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> </Grid.RowDefinitions> <TextBox Text="TextBox" Grid.Column="0" Grid.Row="0" /> <TextBox Text="TextBox" Grid.Column="1" Grid.Row="0" /> <TextBox Text="TextBox" Grid.Column="2" Grid.Row="0" /> </Grid>
8.
//GridSplitter
可以使用GridSplit控件结合Grid控件 实现类似于Windows应用程序中SplitContainer的功能
//GridSplitter <Grid> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition MinWidth="100"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition MinWidth="50"></ColumnDefinition> </Grid.ColumnDefinitions> <Button Grid.Row="0" Grid.Column="0" Margin="3">Left</Button> <Button Grid.Row="0" Grid.Column="2" Margin="3">Right</Button> <Button Grid.Row="1" Grid.Column="0" Margin="3">Left</Button> <Button Grid.Row="1" Grid.Column="2" Margin="3">Right</Button> <GridSplitter Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" Width="3" VerticalAlignment="Stretch" HorizontalAlignment="Center" ShowsPreview="False"></GridSplitter> </Grid>
9.
//共享控件大小 SharedSizeGroup
//共享控件大小 SharedSizeGroup <Grid Grid.IsSharedSizeScope="True" Margin="3"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Grid Grid.Row="0" Margin="3" Background="LightYellow" ShowGridLines="True"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" SharedSizeGroup="TextLabel"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Label Margin="5">A very long bit of text</Label> <!-- <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Width="10"></GridSplitter> --> <Label Grid.Column="1" Margin="5">More text</Label> <TextBox Grid.Column="2" Margin="5">A text box</TextBox> </Grid> <Label Grid.Row="1" >Some text in between the two grids...</Label> <Grid Grid.Row="2" Margin="3" Background="LightYellow" ShowGridLines="True"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" SharedSizeGroup="TextLabel"></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Label Margin="5">Short</Label> <TextBox Grid.Column="1" Margin="5">A text box</TextBox> </Grid> </Grid>
10.
//InkCanvas
- 主要目的是(通过鼠标或者和指示笔)捕捉笔迹。
- 从FrameworkElement 继承。
- 默认模式下,InkCanvas
允许在它的表面上进行简单的书写和画图。当使用指示笔时,笔尖用来写、笔端用来擦。、
- 通过使用InkCanvas 的DefaultDrawingAttributes
属性,可以改变以后输入的笔画外观(宽度、颜色等)。
- 利用EditingMode 属性被独立地应用到指示笔尖(或鼠标),并通过Edit
ingModeInverted 属性来应用于指示笔的末端(back end)。只读的ActiveEdit ingMode
属性可以告诉你哪一个属性当前正在被使用。所有这3 个属性都是InkCanvasEdit ingMode 类型的,它有以下几种值:
·Ink(Edit ingMode 的默认值)—— 通过鼠标或者指示笔来绘制笔画。
·InkAndGesture —— 和Ink 一样,但同样可以识别用户的手势。手势的列表(Up、Down、Circle、
ScratchOut 和Tap)保存在System.Windows.Ink.Applicat ionGesture 枚举类型中。
·GestureOnly —— 只识别手势,不会绘制用户输入的笔画。
·EraseByStroke (Edit ingModeInverted 的默认值)—— 当笔画被触及时将笔画擦掉。
·EraseByPoint —— 只擦掉直接碰及到的笔画部分(就像传统的铅笔橡皮)。
·Select —— 当被触及时,选择笔画或者任何UIElement,使它们能被删除、移动或者在InkCanvas 范
围内被调整尺寸。
·None —— 对于鼠标或者指示笔不做任何响应。
- 定义了15
种事件,其中包括改变编辑模式、改变/移动/调整选择、收集或者擦除笔画,以及执行手势。
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <StackPanel Margin="5" Orientation="Horizontal"> <TextBlock Margin="5">EditingMode: </TextBlock> <ComboBox Name="lstEditingMode" VerticalAlignment="Center"> </ComboBox> </StackPanel> <InkCanvas Name="inkCanvas" Grid.Row="1" Background="LightYellow" EditingMode="{Binding ElementName=lstEditingMode,Path=SelectedItem}"> <Button InkCanvas.Top="10" InkCanvas.Left="10">Hello</Button> <!--<Image Source="office.jpg" InkCanvas.Top="10" InkCanvas.Left="10" Width="287" Height="319"></Image>--> </InkCanvas> </Grid>
后台代码
public SimpleInkCanvas()//构造函数 { InitializeComponent(); foreach (InkCanvasEditingMode mode in Enum.GetValues(typeof(InkCanvasEditingMode))) { lstEditingMode.Items.Add(mode); lstEditingMode.SelectedItem = inkCanvas.EditingMode; } }
11.
UniformGrid 控件为控件提供了一种简化的 网格布局。当控件添加到 UniformGrid 时,它们会排列在一个网格模式中,该 网格模式会自动调整以使控件之间的距离保持均匀。单元格的数目将进行调整, 以适应控件的数目。例如,如果四个控件添加到 UniformGrid 中,它们将安排 在包含四个单元格的网格中。
在使用UniformGrid的时候:
各单元格的大小完全相同
单元格的数量取决于放入的控件的数量,且单元格一定是行、列数相同的,即 1*1、2*2、3*3、4*4…的单元格分布
//UniformGrid
<UniformGrid Rows="2" Columns="2"> <Button>Top Left</Button> <Button>Top Right</Button> <Button>Bottom Left</Button> <Button>Bottom Right</Button> </UniformGrid>
12.
//AddHandler添加事件+FindLogicalNode寻找控件
public ModularContent() { InitializeComponent(); AddHandler(CheckBox.CheckedEvent, new RoutedEventHandler(chk_Checked)); AddHandler(CheckBox.UncheckedEvent, new RoutedEventHandler(chk_Unchecked)); } private void chk_Checked(object sender, RoutedEventArgs e) { CheckBox chk = (CheckBox)e.OriginalSource; DependencyObject obj = LogicalTreeHelper.FindLogicalNode(this, "控件名"); ((FrameworkElement)obj).Visibility = Visibility.Visible; } private void chk_Unchecked(object sender, RoutedEventArgs e) { CheckBox chk = (CheckBox)e.OriginalSource; DependencyObject obj = LogicalTreeHelper.FindLogicalNode(this, "控件名"); ((FrameworkElement)obj).Visibility = Visibility.Collapsed; }