.NET-7.WPF学习1. 经验总结

前言

好好学习,落到实处。

学习参考

Wpf教程:WPF Tutorial官网文档cnblog系列文章B站痕迹-git-MyToDoApp教程1-教程2

Wpf项目:画图工具流程图思维导图大疆温度区域项目案例项目1

WpfUI: HandyControlRubyer-WPFMaterialDesignInXAMLLayui-WPFWPFDevelopersOrgwpfuiakwkevinPanuonUIEASkinscook-csharpUIXXSukiUIwpfuiPanuon.WPF.UIAduSkin

Wpf框架:


随记好文:

WPF转换器控件共用事件自定义控件 极力推荐gitHubTopicwpf千自学码客独立观察员dotnet9TerminalMACS

wpf理论

//主要知识点
布局、控件、样式、依赖属性、资源、触发器、模板、数据绑定mvvm command
//MVVM开发模式框架、
(prism ,MVVMLight ,CommunityToolkit.Mvvm,Microsoft.Toolkit.Mvvm ,Caliburn.Micro(简称CM)) --fody

//六大布局:
StackPanel,WrapPanel,DockPanel,Grid,UniformGrid,Canvas

//五大触发器: 
Trigger 、MultiTrigger、DataTrigger、 MultiDataTrigger、 EventTrigger 
每个触发器都是 System.Windows.TriggerBase的派生类实例, 

//五种绑定:
Default、OneTime、OneWay、TwoWay、OneWayToSource

//基本的公共样式,继承,静态资源与动态资源:
Resources>Style(key,TargetType,BasedOn)>Setter
StaticResource,DynamicResource
<SolidColorBrush x:Key="solidColor" Color="Red"/>
this.Resources["solidColor"]=new SolidColorBrush(Colors.Yellow);

//获得控件元素:e.Source as Button;(FrameworkElement) sender;(FrameworkElement) args.Source;
// Grid 分割栏 GridSplitter 
//什么时xaml?xaml 是wpf中专门用来设计ui的语言。
//panel.Zindex 越大越在上面
//UpdateSourceTrigger三个值:Explicit、LostFocus和PropertyChanged。
//折叠所有XAML代码节CTRL + M,L  两次;CTRL + M, A
//一个竖线
<Line Height="15" Y2="1" Stroke="#707070" Stretch="Uniform" Margin="6 0" />
// 后台代码更改字体或者背景颜色
new SolidColorBrush( Color.FromArgb(255, 255, 0, 0));
new SolidColorBrush((Color)ColorConverter.ConvertFromString("#92e492"));
new SolidColorBrush(Color.FromRgb(255,255,255));
Brushes.Green;
//ScrollViewer 
VerticalScrollBarVisibility HorizontalScrollBarVisibility CanContentScroll="True"
//TextBox多行文本框
<TextBox Height="373" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Visible"></TextBox>
//图标的赋值
Stream iconStream = Application.GetResourceStream(new Uri("pack://application:,,,/DrawTools;component/Images/file.ico")).Stream;
treeViewItem.Icon = new System.Drawing.Icon(iconStream);  // 图标
//image.Source
Image image = new Image(); image.Width = 850; image.Stretch = Stretch.Fill;
BitmapImage picture = new BitmapImage(new Uri(lbi));
image.Source = picture;
//设置回车 设置ESC
<Button Name="btnDefault" IsDefault="true" Click="OnClickDefault">OK</Button>设置回车
<Button Name="btnDefault" IsCancel="true" Click="OnClickDefault">OK</Button>设置ESC
//mvvm 命令 其他事件
Nuget包:Microsoft.Xaml.Interactions 
<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseDoubleClick">
        <i:InvokeCommandAction Command="{Binding Btncommand}"  CommandParameter="read" />
    </i:EventTrigger>
</i:Interaction.Triggers>
//pack WPF URI
pack://application:,,,/是协议;“,,,”是“///”的变体
Uri uri = new Uri("pack://application:,,,/ResourceFile.xaml", UriKind.Absolute);
// ClickMode="Hover" Press Release
<Button Content="ClickMe" Click="OnClick1" ClickMode="Hover"/>
void OnClick1(object sender, RoutedEventArgs e)=> btn1.Background = Brushes.LightBlue;
// CommandParameter绑定Path后为"."或者空表示绑定source本身

 
1.代码摘抄 
public static class Win32Helper
{
    [DllImport("shell32.dll")]
    public static extern int ShellAbout(IntPtr hWnd, string szApp, string szOtherStuff, IntPtr hIcon);
}

private void OnAboutCommand()
{
    Assembly assembly = Assembly.GetExecutingAssembly();
    var title = assembly.GetCustomAttribute(typeof(AssemblyTitleAttribute)) as AssemblyTitleAttribute;
    var version = assembly.GetCustomAttribute(typeof(AssemblyFileVersionAttribute)) as AssemblyFileVersionAttribute;

    StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new Uri("WpfNotepad.ico", UriKind.Relative));
    Icon icon = new Icon(streamResourceInfo.Stream);

    Win32Helper.ShellAbout(Process.GetCurrentProcess().MainWindowHandle, title.Title, version.Version, icon.Handle);
}

private void OnFeedBackCommand()
{
    Process.Start("feedback-hub://?appid=1231313");
}

private void OnHelpCommand()
{
    Process.Start("https://go.microsoft.com/fwlink/?LinkId=834783");
}

# C#之AOP的实现
1.什么是AOP
AOP(Aspect Oriented Programming)的字面意思是“面向切面编程”。举个例子解释一下,如果我们把三层架构的表现层,业务逻辑层和数据访问层看作是河流的上游,中游和下游,那么“面向切面编程”就是架设在上游和中游分界处的三峡大坝,他对每一滴河水作一个公共的操作,比如染成红色或者过滤掉大鱼。
AOP的意义在于能够让我们在不影响原有功能的前提下,为软件横向扩展功能,说穿了就是解耦。
https://www.cnblogs.com/panpanwelcome/p/8617552.html

2. 任务调度:
这个任务每天或每周自动执行,定时刷新数据。
Coravel、Quart.Net、HangFire.

3.  WPF中怎样拖拽文件呢?
注册这两个事件即可:DragEnter、Drop
<Grid   AllowDrop="True" Drop="Grid_Drop" DragEnter="Grid_DragEnter">
 private void Grid_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effects = DragDropEffects.Link;
    else
        e.Effects = DragDropEffects.None;
}
private void Grid_Drop(object sender, DragEventArgs e)
{
    //需要获取目标文件路径
    var fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
    zhouyi.Content = fileName;
}

4. c#中类的执行顺序
1子类静态成员2子类静态构造3子类实例成员4父类静态成员
5父类静态构造6父类实例成员7父类实例构造8子类实例构造

5. goto 控制程序跳转到指定的位置执行
提示:goto 语句并不限于在循环中使用,其它的情况也可以使用。但是,goto 语句不能从循环外跳转到循环语句中,而且不能跳出类的范围。
login:
Console.WriteLine("请输入密码");var userpwd = Console.ReadLine();
goto login;

6. C#中ref、out、in的区别与使用
ref、out、in都是将参数按引用来传递,什么都不加是值传递,这在内存分配上是有差异的。
ref:可读可写(可进可出)
out:只能写不能读(只出不进)
in:只能读不能写(只进不出)

7. 值传递、引用传递、输出传递(值传递是将参数传递给函数的默认方式)
值传递:值传递的本质就是将实参的副本(将实参的值复制一份)传递给函数的形参。认方式
引用传递:引用传递是对变量内存位置的引用。

8. C# 中的析构函数
同样是类中的一个特殊成员函数,主要用于在垃圾回收器回收类实例时执行一些必要的清理操作。
class Car
{
    ~Car()  // 析构函数
    Console.WriteLine("类中的析构函数");
}

9. 使用 this 关键字串联构造函数
//先执行 Test(),后执行 Test(string text)
Test test = new Test("测试数据");
public class Test
{
    public Test(){ Console.WriteLine("无参构造函数");}
    public Test(string text) : this()
    {Console.WriteLine(text+"实例构造函数");}
}

10. this关键字(niubi)
1) 使用 this 表示当前类的对象
2) 使用 this 关键字串联构造函数
3) 使用 this 关键字作为类的索引器
4) 使用 this 关键字作为原始类型的扩展方法

11. 通过委托传值,触发,值得参考。
public class PublisherDemo
{/***********发布器类***********/
    private string myVar;
    public static Action<string> ChangeValue;
    public string MyVar
    {
        get => myVar;
        set { myVar = value; ChangeValue(value); }// 发事件
    }

}
public class SubscriberDemo
{/***********订阅器类***********/
     public SubscriberDemo()
            PublisherDemo.ChangeValue+=(obj)=>{};
}

12. *.Parse(string)、 *.TryParse(string,out int demo)
注意:ConvertToInt32()和int.Parse()对于空值(null)的处理不同,ConvertToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。
Console.WriteLine(Int32.Parse("22"));
Int32.TryParse("33", out int demo);
Convert.ToInt32(null)

13.  
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//转化成24小时
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));//转化成24小时

14. FlowDocumentReader滚动到顶部
FlowDocumentPageViewer1.Document.BringIntoView();

15. 
这似乎很适合页面浏览,但不适用于滚动视图,这没关系。
reader的类型是FlowDocumentReader,文档是其中的FlowDocument。
设置的书签:

var paginator = ((IDocumentPaginatorSource)document).DocumentPaginator as DynamicDocumentPaginator; 
var position = paginator.GetPagePosition(paginator.GetPage(reader.PageNumber - 1)) as TextPointer; 
bookmark = position.Paragraph; 
还原书签:

bookmark.BringIntoView(); 

理论的链接

16. WPF使用阿里巴巴iconfont矢量图标库
http://t.zoukankan.com/Stay627-p-14469662.html
17. 读取appsetting.json的两种方式
https://www.modb.pro/db/104729
18. WPF模拟点击按钮
btn.RaiseEvent(new RoutedEventArgs(Button.ClickEvent, btn));
19. 关于c#:将List < T >转换为ObservableCollection < T >
https://www.codenong.com/16432450/
20. 《.NET/C#面试手册》
https://www.yuque.com/zhanglin-l1ak6/ll06t7
21. 中国有哪些比较出名的C#大佬。?
https://www.cnblogs.com/sexintercourse/p/16256753.html
22. ECMAScript 6 入门
https://es6.ruanyifeng.com/#docs/object-methods
23. .Net Core Excel导入导出神器Npoi.Mapper
https://www.cnblogs.com/wucy/p/14125392.html
https://donnytian.github.io/Npoi.Mapper/
24. MiniExcel
https://gitee.com/dotnetchina/MiniExcel#getstart1
25. c# 获取照片的经纬度和时间
https://blog.csdn.net/fangyu723/article/details/102820203

控件介绍

  1. (基本)Border 、TextBlock、TextBox 、RichTextBox 、PasswordBox
  2. (按钮)Button 、RadioButton 、RepeatButton
  3. (布局)Grid、DockPanel、StackPanel、WrapPanel、Panel
  4. (数据显示)DataGrid、ListView、TreeView
  5. (菜单)ContextMenu、Menu、ToolBar
  6. (日期)Calendar、DatePicker
  7. (导航) Frame、Hyperlink、Page、NavigationWindow、TabControl
  • Frame 框架是一种支持导航的内容控件。
  • Hyperlink 提供用于在流内容中承载超链接的功能的内联级别的流内容元素。
  • Page 封装一页可由 Windows Internet Explorer、NavigationWindow 和 Frame 导航到和承载的内容
  • NavigationWindow 表示支持内容导航的窗口。
  • TabControl 表示包含多个项的控件,这些项共享屏幕上的同一空间。
  • Calendar 代表一个控件,此控件允许用户使用可视的日历显示来选择日期。
  • DatePicker 表示一个允许用户选择日期的控件
  • ContextMenu 表示一个弹出菜单,该弹出菜单使控件能够公开特定于该控件的上下文的功能。
  • Menu 表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素。
  • ToolBar 为一组命令或控件提供容器。
  • DataGrid 表示用于在可自定义的网格中显示数据的控件
  • ListView 表示用于显示数据项列表的控件
  • TreeView 表示一个控件,该控件在树结构(其中的项可以展开和折叠)中显示分层数据。
  • Grid 定义由列和行组成的灵活的网格区域
  • DockPanel 定义一个区域,从中可以按相对位置水平或垂直排列各个子元素
  • StackPanel 将子元素排列成水平或垂直的一行
  • WrapPanel 按从左到右的顺序位置定位子元素,在包含框的边缘处将内容切换到下一行
  • Panel 为所有 Panel 元素提供基类
  • Border 在另一个元素四周绘制边框和/或背景。
  • TextBox 表示一个控件,该控件可用于显示或编辑无格式文本。
  • RichTextBox 支持更丰富内容
  • PasswordBox有关需要接受密码或其他敏感输入
  • RepeatButton表示从按下按钮到释放按钮的时间内重复引发其 Click 事件的控件

posted @ 2022-08-02 23:13  cactus9  阅读(136)  评论(0编辑  收藏  举报