WPF学习笔记(1)

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;
        }

  

原文地址:https://www.cnblogs.com/DragonX/p/3476154.html