深入了解WPF控件:基础概念与用法(三)

news2024/11/15 9:23:09

掌握WPF控件:熟练常用属性(三)

DataGrid

  • 用于显示和编辑数据的表格控件。它可以从多种数据源(如SQL数据库、LINQ查询或任何其他可绑定的数据源)中显示和编辑数据,支持排序、筛选、分页等功能。
DataGrid基本相关属性
基础属性描述
ItemsSource用来DataGrid中显示的数据源,可以直接绑定到一个集合对象,也可以手动创建列并绑定到集合中的属性。
IsReadOnly用来设置DataGrid是否为只读,默认为false。如果设置为只读,用户将无法编辑单元格。
HeadersVisibility用来设置是否显示行头和列头。默认值为 All,可选值有:None、Column、Row、All。
ClipboardCopyMode用来获取或设置一个值,该值指示如何将内容复制到剪贴板。可选值包括None、ExcludeHeader、IncludeHeader和All。比如是否可以将数据从 DataGrid 控件复制到剪贴板,以及是否包含列标题值。
CellStyle用来获取或设置应用来DataGrid 中所有单元格的样式。
GridLinesVisibility获取或设置一个值,该值指示显示哪些网格线。可选值有:All(水平垂直)、Horizontal(水平)、None(无),Vertical(垂直)
HorizontalGridLinesBrush用来获取或设置水平网格线的笔刷。
VerticalGridLinesBrush用来获取或设置用于绘制垂直网格线的画笔。
HorizontalScrollBarVisibility用来获取或设置水平滚动条的显示方式。可选值:Auto(需要时显示)、Visible(始终显示)、Hidden(始终不显示)
VerticalScrollBarVisibility获取或设置一个值,该值指示垂直滚动条在 DataGrid 中的显示方式。可选值:Auto(需要时显示)、Visible(始终显示)、Hidden(始终不显示)
  • 下面实现一个基本的DataGrid列表,实现绑定数据
 <Grid>
     <Grid.RowDefinitions>
         <RowDefinition></RowDefinition>
         <RowDefinition></RowDefinition>
         <RowDefinition></RowDefinition>
     </Grid.RowDefinitions>
     <!--第一个自动生成列,设置列宽为100-->
     <DataGrid Grid.Row="0" x:Name="myDataGrid" ColumnWidth="100"></DataGrid>

     <!--第二个设置不自动生成列 AutoGenerateColumns=False,并且设置列宽为100-->
     <!--设置复制时包括列头ClipboardCopyMode ="IncludeHeader"-->
     <DataGrid Grid.Row="1" x:Name="myDataGrid1"  AutoGenerateColumns="False"   ColumnWidth="100" ClipboardCopyMode ="IncludeHeader">
         <DataGrid.Columns>
             <!-- 定义列 -->
             <DataGridTextColumn Header="ID" Binding="{Binding Id}"  />
             <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
             <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
         </DataGrid.Columns>
     </DataGrid>
     <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Height="40">
         <Button Content="隐藏/显示行头和列头" Click="Button_Click"></Button>
         <Button Content="设置/取消单元格样式" Click="Button_Click_1" Margin="10,0"></Button>
         <Button Content="设置/取消列头样式" Click="Button_Click_2" Margin="10,0"></Button>
         <Button Content="设置/取消网格线" Click="Button_Click_3" Margin="10,0"></Button>
     </StackPanel>
 </Grid>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace WpfCommonControls
{
    /// <summary>
    /// DataGrid.xaml 的交互逻辑
    /// </summary>
    public partial class DataGrid : Window
    {
        static Random random = new Random();
        public DataGrid()
        {
            InitializeComponent();
            LoadData();
            // 设置滚动条始终不显示
            myDataGrid.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            //设置垂直滚动条必要时显示
            myDataGrid.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
        }

        private void LoadData()
        {

            List<PersonModel> list = new List<PersonModel>
            {
                new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }
            };
            // 绑定第一个DataGrid
            myDataGrid.ItemsSource = list;
            // 设置第二个DataGrid的数据上下文
            myDataGrid1.ItemsSource = list;
        }

        public class PersonModel
        {
            /// <summary>
            /// ID
            /// </summary>
            public int Id { get; set; }

            /// <summary>
            /// 姓名
            /// </summary>
            public string? Name { get; set; }

            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set; }
        }


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // 隐藏/显示行和列头
            myDataGrid.HeadersVisibility = myDataGrid.HeadersVisibility== DataGridHeadersVisibility.None? DataGridHeadersVisibility.All: DataGridHeadersVisibility.None;
            myDataGrid1.HeadersVisibility = myDataGrid1.HeadersVisibility == DataGridHeadersVisibility.None ? DataGridHeadersVisibility.All : DataGridHeadersVisibility.None;
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            if (myDataGrid.Columns[0].CellStyle != null || myDataGrid1.Columns[0].CellStyle != null)
            {
                myDataGrid.Columns[0].CellStyle = null;  // 取消第一列的单元格样式
                myDataGrid1.Columns[0].CellStyle = null;   // 取消第一列的单元格样式
            }
            else
            {
                //设置单元格样式
                Style cellStyle = new Style(typeof(DataGridCell));
                cellStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.LightBlue));  // 设置背景
                cellStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Black));   // 设置字体颜色
                cellStyle.Setters.Add(new Setter(BorderBrushProperty, Brushes.DarkBlue));  // 设置边框颜色
                cellStyle.Setters.Add(new Setter(BorderThicknessProperty, new Thickness(2))); //设置边框线
                myDataGrid.Columns[0].CellStyle = cellStyle;  // 设置第一列的单元格样式
                myDataGrid1.Columns[0].CellStyle = cellStyle; // 设置第一列的单元格样式
            }
            
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            if (myDataGrid.ColumnHeaderStyle != null || myDataGrid1.ColumnHeaderStyle != null)
            {
                myDataGrid.ColumnHeaderStyle = null;  // 取消列头样式
                myDataGrid1.ColumnHeaderStyle = null;   // 取消列头样式
            }
            else
            {
                // 设置列头样式
                Style cellStyle = new Style(typeof(DataGridColumnHeader));
                cellStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.LightBlue));  // 设置背景
                cellStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Black));   // 设置字体颜色
                cellStyle.Setters.Add(new Setter(BorderBrushProperty, Brushes.DarkBlue));  // 设置边框颜色
                cellStyle.Setters.Add(new Setter(BorderThicknessProperty, new Thickness(2))); //设置边框线
                myDataGrid.ColumnHeaderStyle = cellStyle;  // 设置列头样式
                myDataGrid1.ColumnHeaderStyle = cellStyle; // 设置列头样式
            }

               
        }

        private void Button_Click_3(object sender, RoutedEventArgs e)
        {
            // 设置/取消网格线
            myDataGrid.GridLinesVisibility = myDataGrid.GridLinesVisibility == DataGridGridLinesVisibility.None ? DataGridGridLinesVisibility.All : DataGridGridLinesVisibility.None;
            myDataGrid1.GridLinesVisibility = myDataGrid1.GridLinesVisibility == DataGridGridLinesVisibility.None ? DataGridGridLinesVisibility.All : DataGridGridLinesVisibility.None;

        }
    }
}


DataGrid基本信息

DataGrid行相关属性
行相关属性描述
AlternatingRowBackground用来获取或设置交替行背景颜色。
AreRowDetailsFrozen用来控制是否冻结行详细信息部分的内容。当AreRowDetailsFrozen属性设置为true时,表示行详细信息部分的内容不会水平滚动出视图,即被冻结。这样可以提高性能,特别是在处理大量数据时,因为行详细信息部分的内容不需要随着行的滚动而重新绘制。通常该属性的默认值为false。
CanUserAddRows用来获取或设置一个值(默认为true),该值指示用户是否可在 DataGrid 中添加新行。
CanUserDeleteRows用来获取或设置一个值(默认为true),该值指示用户是否可从 DataGrid 中删除行。
CanUserResizeRows用来获取或设置一个值(默认为true),该值指示用户是否可以使用鼠标调整行的高度。
CurrentItem用来获取或设置当前选中的项。
RowDetailsTemplate用来获取或设置显示行详细信息的模板。
RowDetailsVisibilityMode用来获取或设置一个值,该值指示何时显示行的详细信息部分。
SelectedIndex用来获取或设置当前选中行的索引。
SelectedItem用来获取或设置当前选中行绑定的数据项。
RowBackground和RowStyle用来获取或设置填充行的背景颜色和行样式。
MinRowHeight用来获取或设置 DataGrid 中行和标题的最小高度约束。它是个double 类型值。
RowHeight用来获取或设置所有行的建议高度。
RowValidationRules用来获取用于验证每行中的数据的规则。
  • 下面写一个例子
```<Grid>
     <Grid.RowDefinitions>
         <RowDefinition></RowDefinition>
         <RowDefinition></RowDefinition>
     </Grid.RowDefinitions>
     <!--设置 AlternatingRowBackground交替行的背景颜色,如总行数小于2时,则需要AlternationCount 设置为2-->
     <!--设置CanUserAddRows =false 禁止添加行,设置为false 后,底部不会多出一个空行-->
     <!--设置CanUserDeleteRows=false会禁止delete键删除行数据-->
     <!--设置CanUserResizeRows为false,禁止拖动设置行高,鼠标移动到行的最左边,鼠标不会出现可以拖动样式-->

     <!--设置最小行高为MinRowHeight=30.0,注意它的类型为double类型 -->
     <DataGrid  Grid.Row="0" x:Name="myDataGrid"  AutoGenerateColumns="False"   ColumnWidth="100" AlternatingRowBackground="LightBlue" AlternationCount ="2" CanUserAddRows ="False" CanUserDeleteRows="False" CanUserResizeRows="False" MinRowHeight="30.0">
         <DataGrid.Columns>
             <!-- 定义列 -->
             <DataGridTextColumn Header="ID" Binding="{Binding Id}"  />
             <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
             <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
         </DataGrid.Columns>
     </DataGrid>
     <Button  Grid.Row="1" Height="50" Width="180" Content="设置/或获取当前选中的行" Click="Button_Click"></Button>
 </Grid>
```using System.ComponentModel;
using System.Windows;

namespace WpfCommonControls
{
   /// <summary>
   /// RowDataGrid.xaml 的交互逻辑
   /// </summary>
   public partial class RowDataGrid : Window
   {
       static Random random = new Random();
       public RowDataGrid()
       {
           InitializeComponent();
           LoadData();
       }

       private void LoadData()
       {

           List<PersonModel> list = new List<PersonModel>
           {
               new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },
               new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },
               new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },
               new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }
           };
           // 绑定DataGrid
           myDataGrid.ItemsSource = list;
       }

       public class PersonModel: INotifyPropertyChanged
       {
           /// <summary>
           /// ID
           /// </summary>
          private int id;
           public int Id { get { return id; } set {
                   if (id != value)
                   {
                       id = value;
                       OnPropertyChanged("Id");
                   }
               }
           }

           /// <summary>
           /// 姓名
           /// </summary>
           private string? name;
           public string? Name {
               get { return name; }
               set{
                   if (name != value)
                   {
                       name = value;
                       OnPropertyChanged("Name");
                   }
               }
           }

           /// <summary>
           /// 年龄
           /// </summary>
           private int age;
           public int Age
           {
               get { return age; }
               set
               {
                   if (age != value)
                   {
                       age = value;
                       OnPropertyChanged("Age");
                   }
               }
           }

           // 实现INotifyPropertyChanged接口
           public event PropertyChangedEventHandler? PropertyChanged;

           // 当属性值更改时,触发此方法
           protected virtual void OnPropertyChanged(string propertyName)
           {
               PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
           }
       }

       private void Button_Click(object sender, RoutedEventArgs e)
       {

           //要想修改当前行必须要实现INotifyPropertyChanged接口

           var currItem = myDataGrid.SelectedItem as PersonModel;
           if (currItem == null)
           {
               MessageBox.Show("请选中指定行");
               return;
           }
               
           currItem.Id = 111;
           currItem.Name = "手动设置行";
           currItem.Age = 100;
           // 在UI线程中设置新的SelectedItem
           Application.Current.Dispatcher.Invoke(() =>
           {
               //myDataGrid.SelectedItem = currItem;
               //或者
               myDataGrid.CurrentItem = currItem; // 将当前选中项设置为item
           });
           

       }
   }
}

DataGrid行属性

DataGrid列相关属性
列相关属性描述
AutoGenerateColumns用来决定是否自动生成列。如果设置为true,DataGrid将自动按列名生成列,并将列绑定到集合中的属性。默认值为true。
CanUserReorderColumns用来获取或设置一个值,该值指示用户是否可以通过使用鼠标拖动列标题来更改列显示顺序。
CanUserResizeColumns用来获取或设置一个值,该值指示用户是否可以使用鼠标调整列的宽度。
CanUserSortColumns用来获取或设置一个值,该值指示用户是否可以通过单击列标题对列进行排序。
ColumnHeaderHeight用来获取或设置列标题行的高度。该值为double 类型。
ColumnHeaderStyle用来获取或设置列头的样式。
Columns用来获取一个集合,其中包含 DataGrid 中的所有列。
CurrentColumn用来获取或设置包含当前单元格的列。
ColumnWidth用来获取或设置列的宽度。
MaxColumnWidth用来获取或设置DataGrid的最大列宽。
MinColumnWidth用来获取或设置DataGrid的最小列宽。
  • 下面来写个例子
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>


    <!--设置AutoGenerateColumns为false,不自动生成列-->
    <!--设置CanUserReorderColumns为false,不允许拖动列-->
    <!--设置CanUserResizeColumns为false,不允许拖动列调整宽度,鼠标放上去不出现可拖动图标-->
    <!--设置CanUserSortColumns为false,禁止点击列头,进行列排序-->
    <!--设置ColumnHeaderHeight为30.0 标题行高度,注意值为double 类型-->
    <!--设置MaxColumnWidth为80.0,最大列宽-->
    <DataGrid  Grid.Row="0" x:Name="myDataGrid"  AutoGenerateColumns="False"   ColumnWidth="100" AlternatingRowBackground="LightBlue" AlternationCount ="2" CanUserAddRows ="False" CanUserDeleteRows="False" CanUserResizeRows="False" MinRowHeight="30.0" CanUserReorderColumns ="False" CanUserResizeColumns="False" CanUserSortColumns="False" ColumnHeaderHeight="30.0" MaxColumnWidth="80.0">
        <DataGrid.Columns>
            <!-- 定义列 -->
            <DataGridTextColumn Header="ID" Binding="{Binding Id}"  />
            <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
            <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
        </DataGrid.Columns>
    </DataGrid>

    <Button Grid.Row="1" Height="50" Width="150" Content="设置/取消标题行样式" Click="Button_Click"></Button>
</Grid>
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace WpfCommonControls
{
    /// <summary>
    /// CellDataGrid.xaml 的交互逻辑
    /// </summary>
    public partial class CellDataGrid : Window
    {
        static Random random = new Random();
        public CellDataGrid()
        {
            InitializeComponent();
            LoadData();
        }
 
        private void LoadData()
        {

            List<PersonModel> list = new List<PersonModel>
            {
                new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }
            };
            // 绑定DataGrid
            myDataGrid.ItemsSource = list;
        }

        public class PersonModel : INotifyPropertyChanged
        {
            /// <summary>
            /// ID
            /// </summary>
            private int id;
            public int Id
            {
                get { return id; }
                set
                {
                    if (id != value)
                    {
                        id = value;
                        OnPropertyChanged("Id");
                    }
                }
            }

            /// <summary>
            /// 姓名
            /// </summary>
            private string? name;
            public string? Name
            {
                get { return name; }
                set
                {
                    if (name != value)
                    {
                        name = value;
                        OnPropertyChanged("Name");
                    }
                }
            }

            /// <summary>
            /// 年龄
            /// </summary>
            private int age;
            public int Age
            {
                get { return age; }
                set
                {
                    if (age != value)
                    {
                        age = value;
                        OnPropertyChanged("Age");
                    }
                }
            }

            // 实现INotifyPropertyChanged接口
            public event PropertyChangedEventHandler? PropertyChanged;

            // 当属性值更改时,触发此方法
            protected virtual void OnPropertyChanged(string propertyName)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (myDataGrid.ColumnHeaderStyle != null)
            {
                myDataGrid.ColumnHeaderStyle = null;  // 取消列头样式
            }
            else
            {
                // 设置列头样式
                Style cellStyle = new Style(typeof(DataGridColumnHeader));
                cellStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.LightPink));  // 设置背景
                cellStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Black));   // 设置字体颜色
                cellStyle.Setters.Add(new Setter(BorderBrushProperty, Brushes.DarkBlue));  // 设置边框颜色
                cellStyle.Setters.Add(new Setter(BorderThicknessProperty, new Thickness(1))); //设置边框线
                myDataGrid.ColumnHeaderStyle = cellStyle;  // 设置列头样式
            }
        }
    }
}

DataGrid列属性

公众号“点滴分享技术猿

关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1387795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时间序列数据库选型: influxdb; netdiscover列出docker实例们的ip,docker管理工具lazydocker、scope

influxdb influxdb: 有收费版本、有开源版本 influxdb 安装、启动(docker) docker run -itd --name influxdb-dev -p 8086:8086 influxdb #influxdb的web客户端(端口8003)被去掉了 #8006是web-service端口#docker exec -it influxdb-dev bashinfluxdb 自带web界面 从后面的…

Express(二):文件下载 - 分片下载

效果&#xff08;比较下载速度&#xff09; 服务端 请求响应头 源码 const express require(express); const path require("path"); const fs require("fs"); const router express.Router();const fileName 下载文件.zip; const filePath path.j…

基于LabVIEW的声音信号采集分析系统开发

摘要&#xff1a;以美国国家仪器(NI)公司开发的LabVIEW虚拟仪器为软件开发平台&#xff0c;设计了一个可以同步实现声音信号采集和分析的多功能模块化软件系统&#xff0e;借助LabVIEW图形化软件相应的声音读取、写入和存储函数实现对声音信号的采集、存储、时域分析和频域分析…

精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;15&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;2&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 上一篇介绍了固定时间窗口算法在支付渠道限流的应用以及使用redis…

Spring Boot异常处理!!!

SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请求&#xff0c;然后跳转到默认显示异常的页面…

vue:使用【3.0】:条件模块

一、条件层级效果图 二、代码 <template><ContentWrap><!-- 添加条件分支:level1 --><div class"btnBox" v-if"isEdit"><el-button type"primary" click"add">添加条件分支</el-button></div…

如何优化大型语言模型,让AI回应更智能、更准确?

什么是检索增强生成&#xff08;RAG)&#xff1f; 检索增强生成&#xff08;RAG&#xff09;是一种优化大型语言模型输出的过程&#xff0c;它在生成回应之前会参考其训练数据源之外的权威知识库。大型语言模型&#xff08;LLM&#xff09;在大量数据上进行训练&#xff0c;使…

Windows10解决大小核调度问题

文章目录 1.开启高性能模式2.下载安装PowerSettingsExplorer3.修改配置生效的异类策略异类线程调度策略异类短时间线程调度策略 4.你的电源策略5.CPU展示 该教程是给笔记本电脑用的&#xff0c;经过我实践是成功的。 1.开启高性能模式 使用管理员模式的PowerShell输入下列指令 …

微信小程序上传并显示图片

实现效果&#xff1a; 上传前显示&#xff1a; 点击后可上传&#xff0c;上传后显示&#xff1a; 源代码&#xff1a; .wxml <view class"{{company_logo_src?blank-area:}}" style"position:absolute;top:30rpx;right:30rpx;height:100rpx;width:100rp…

C++ 设计模式之享元模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【简介】什么是享元模式 -- 可重复使用 享元模式是⼀种结构型设计模式&#xff0c;在享元模式中&#xff0c;对象被…

基于深度学习的桃子熟度与大小智能检测

基于深度学习的桃子熟度与大小智能检测 基于深度学习的桃子熟度与大小智能检测引言1. 环境搭建与准备2. 数据准备3. 模型准备4. 训练准备5. 服务器端部署结语 基于深度学习的桃子熟度与大小智能检测 引言 随着时代的快速发展&#xff0c;人工智能时代为中国农业带来了新的机遇…

Leetcode刷题【每日n题】(1)

目录 1.题目一 2.思路分析 3.代码实现 4.题目二 5.思路分析 6.代码实现 1.题目一 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴…

Vue-20、Vue.set()的使用

1、添加对象某个属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue.set()的使用</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist…

2023.12.30性质

若连通图上各边的权值均不相同&#xff0c;则该图的最小生成树是唯一的。 由k算法&#xff0c;即由边从小到大的顺序构造&#xff0c;如果边权值各不相同&#xff0c;那么构造出来的最小生成树唯一&#xff0c;就是唯一的顺序&#xff0c;从小到大 关于带权无向图的最小生成…

动态pv(nfs方式挂载)

1、定义 发布pvc之后可以生成pv&#xff0c;还可以在共享服务器上直接生成挂载目录 pvc直接绑定和使用pv 2、动态pv依赖两个组件 &#xff08;1&#xff09;provisioner卷插件&#xff1a;k8s本身支持的动态pv创建不包括nfs&#xff0c;需要声明和安装一个外部插件provisio…

HDFS和MapReduce综合实训

文章目录 第1关&#xff1a;WordCount词频统计第2关&#xff1a;HDFS文件读写第3关&#xff1a;倒排索引第4关&#xff1a; 网页排序——PageRank算法 第1关&#xff1a;WordCount词频统计 测试说明 以下是测试样例&#xff1a; 测试输入样例数据集&#xff1a;文本文档test1…

canvas截取视频图像(图文示例)

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

[VGG团队论文阅读]Free3D: Consistent Novel View Synthesis without 3D Representation

Vedaldi, C. Z. A. (n.d.). Free3D: Consistent Novel View Synthesis without 3D Representation. Chuanxiaz.com. https://chuanxiaz.com/free3d/static/videos/Free3D.pdf Free3D: 无需3D表示的一致新视角合成 Visual Geometry Group, University of Oxford 摘要 我们介绍…

C# 面向切面编程之AspectCore初探

写在前面 AspectCore 是Lemon名下的一个国产Aop框架&#xff0c;提供了一个全新的轻量级和模块化的Aop解决方案。面向切面也可以叫做代码拦截&#xff0c;分为静态和动态两种模式&#xff0c;AspectCore 可以实现动态代理&#xff0c;支持程序运行时在内存中“临时”生成 AOP 动…

Mindspore 公开课 - prompt

prompt 介绍 Fine-Tuning to Prompt Learning Pre-train, Fine-tune BERT bidirectional transformer&#xff0c;词语和句子级别的特征抽取&#xff0c;注重文本理解Pre-train: Maked Language Model Next Sentence PredictionFine-tune: 根据任务选取对应的representatio…