zoukankan      html  css  js  c++  java
  • WPF(1)概述

    序言

    常用控件

    Canvas、StackPanel、WrapPanel、DockPanel和Grid是WPF中主要的5种内建面板,这些面板类都位于System.Windows.Controls命名空间下。

    WPF用于布局的面板主要有6个,StackPanel(栈面板)、WrapPanel(环绕面板)、DockPanel(停靠面板)、Canvas(画布)、Grid(网格面板)和 UniformGrid(均布网格)。

    1.Canvas

    2.StackPanel

    是基于流模式的,它没有绝对定位的概念,一批控件要么从左到右排列,要么从上而下排列

    放置其中的元素,按照StackPanel的属性Orientation确定采用横排布局还是纵向布局

    Orientation="Horizontal"

    Orientation="Vertical"

    VirtualizingStackPanel

    当包含大量元素集合时,请使用 VirtualizingStackPanel虚拟化元素;

     与StackPanel相同,不同之处在于它可以使内容虚拟化。

    3.WrapPanel

    WrapPanel默认按照从左到右的方式(主要依据FlowDirection)布局内容元素,不满一行后自动换行。

    4.DockPanel

    DockPanel支持让元素简单地停靠在整个面板的某一条边上

    5.Grid

     

    UniformGrid

    UniformGrid 就是Grid的简化版,每个单元格的大小相同,不需要定义行列集合。每个单元格始终具有相同的大小,每个单元格只能容纳一个控件,将自动按照定义在其内部的元素个数,自动创建行列,并通常保持相同的行列数。

    ScrollViewer

    ViewBox

    Border

    UserControl

    对WPF来说ContentControl和ItemsControl是最重要的两个控件。

    所谓ItemsTemplate和ContentTemplate都是DataTemplate类型的属性。可以用来定义对应控件显示数据的模板。

    ItemsControl

    ItemsControl是一种数据展示控件,大致分为三个部分组成:Template, ItemTemplate,  ItemsPanel.

     <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Hidden">
                    <ItemsControl ItemsSource="{Binding CourseList}" Name="icCourses">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <!--
                                VirtualizingStackPanel - 虚拟化的 StackPanel(即仅生成需要显示的 UI 元素。当绑定了大量数据,而某时仅显示其中一小部分的时候,使用此控件则可大幅提高呈现效率)
                                    Orientation - 数据的排列方式(垂直排列或水平排列,也就是说 ListBox 也可以水平排列)
                                    VirtualizationMode - 虚拟化的模式
                                        Recycling - item 的容器会被重用,默认值
                                        Standard - 每个 item 都有自己独立的容器 
                                注:ListBox 默认已经使用了 VirtualizingStackPanel,但是其对于变高的 DataTemplate 来说支持得不好
                            -->
                                <VirtualizingStackPanel/>
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplateSelector>
                            <comm:CourseDataTemplateSelector DefaultTempalte="{StaticResource courseTemplate}" SkeletonTemplate="{StaticResource skeletonTemplate}"/>
                        </ItemsControl.ItemTemplateSelector>
                    </ItemsControl>
                </ScrollViewer>

    ContentControl

    DataTemplate

        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Loaded">
                <i:InvokeCommandAction Command="{Binding LoadedCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>

    ScrollViewer

             Application.Current.Dispatcher.Invoke(new Action(() =>
                    {
                        CourseList.Clear();
                        foreach (var item in courseAll)
                        {
                            CourseList.Add(item);
                        }
                    }));

    PropertyChanged

    ObservableCollection<T>

    在使用集合类型的数据作为列表控件的ItemSource时一般会考虑使用ObservableCollection<T>替换List<T>,因为ObservableCollection<T>类实现了INotifyChange和INotifyPropertyChanged接口,能把集合的变化立刻通知显示到它的列表控件上,改变会立刻显示出来。

    WPF入门

    WPF入门(1)——DataContext

    WPF入门(2)——数据绑定与INotifyPropertyChanged(INPC)

    WPF入门(3)——命令

    WPF入门(4)——资源

    WPF入门——Converter、XAML和Style

    使用CallerMemberName简化InotifyPropertyChanged的实现

    1. 将每个 TabItem 的 Visibility 属性设置为 Visibility.Collapsed 即可隐藏标头

    <TabItem Visibility="Collapsed">

    2. 设置 TabControl 控件的 SelectedIndex 属性即可在选项卡之间切换

     ShutdownMode="OnExplicitShutdown"

    Application.Current.Dispatcher.Invoke(new Action(() =>
    {
    (o as Window).DialogResult = true;
    }));

    DataTemplateSelector模板选择器

    WPF之事件绑定命令

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding LoadedCommand}"/>        
        </i:EventTrigger>
    </i:Interaction.Triggers>

    图表插件LiveCharts

    WPF知识点--渐变色(LinearGradientBrush、GradientStop)

    ContentControl与ContentPresenter区别

    一般元素做模板,需要绑定“Content属性”

             <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <TextBlock Text="{TemplateBinding Content}"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

    ContentPresenter模板,不需要

            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <ContentPresenter/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

     WPF Template,ItemsPresenter,ItemContainerStyle,ItemsPanel,contentpresenter

    单值转换器

    多值转换器

    WPF 行为的用法(Behavior)

    WPF包含数据模板和控件模板,其中控件模板又包括ControlTemplate和ItemsPanelTemplate

    ControlTemplate包含两个重要的属性:
    1,VisualTree,该模板的视觉树,其实我们就是使用这个属性来描述控件的外观的
    2,Triggers,触发器列表,里面包含一些触发器Trigger,我们可以定制这个触发器列表来使控件对外界的刺激发生反应,比如鼠标经过时文本变成粗体等。

       <Button>
            <Button.Template>
              <ControlTemplate>
                <!--定义视觉树-->
                <Grid>
                  <Ellipse Name="faceEllipse" Width="{TemplateBinding Button.Width}" Height="{TemplateBinding Control.Height}"  Fill="{TemplateBinding Button.Background}"/>
                  <TextBlock Name="txtBlock" Margin="{TemplateBinding Button.Padding}" VerticalAlignment="Center"  HorizontalAlignment="Center"  Text="{TemplateBinding Button.Content}" />
                </Grid>
                <!--定义视觉树_end-->            
              </ControlTemplate>
            </Button.Template>
          </Button>

    UserControl还是CustomControl

    UserControl,其更像WinForm中自定义控件的开发风格,在开发上更简单快速,几乎可以简单地理解为:利用设计器来将多个已有控件作为子元素来拼凑成一个UserControl并修改其外观,然后后台逻辑代码直接访问这些子元素.其最大的弊端在于:其对模板样式等支持度不好,其重复使用的范围有限.
    CustomControl, 其开发出来的控件才真正具有WPF风格,其对模板样式有着很好的支持,这是因为打造CustomControl时做到了逻辑代码与外观相分离,即使换上一套完全不同的视觉树其同样能很好的工作,就像WPF内置的控件一样.

    事件

    RoutedEvent

    UI库

     WPF开源项目整理

    DMSkin

    资料

    https://www.bilibili.com/video/BV1Jy4y1C7hU?p=2&spm_id_from=pageDriver

    WPF Step By Step -基础知识介绍

  • 相关阅读:
    使用watch定时执行命令并显示结果
    LVS配置
    myeclipse通过查询源码查询方法
    导入struts2框架项目无法运行tomcat
    解决eclipse/myeclipse导入项目时出现红色叹号的方法
    my/eclipse中的debug调试
    导入项目后servlet报错
    转到Servlet出现500型错误
    关于快捷键导包失败
    关于jsp找不到servlet
  • 原文地址:https://www.cnblogs.com/cnki/p/14668795.html
Copyright © 2011-2022 走看看