WPF-页面-DataGrid数据处理-多线程-Winform嵌入
创始人
2024-02-19 15:38:14

页面

if(NavigationService.CanGoBack == true) NavigationService.GoBack();
NavigationService.Navigate(new Uri("Page.xaml",UriKind.Relative));
  • 打印对话框PrintDialog
  • 如果要一下启动两个窗口,可以重写App.cs中的OnStartUP方法
  • 设置窗口所属关系,窗体A.Owner=窗体B
  • 单例模式
public partial class App : Application
{protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);Mutex mutex = new Mutex(true, "MainWindow", out bool isNewInstance);if (!isNewInstance ){IntPtr intPtr = FindWindowW(null, "MainWindow");if (intPtr !=IntPtr.Zero){SetForegroundWindow(intPtr);}Shutdown();}}[DllImport("User32", CharSet = CharSet.Unicode)]static extern IntPtr FindWindowW(string ClassName, string WindowName);[DllImport("User32", CharSet = CharSet.Unicode)]static extern bool SetForegroundWindow(IntPtr hWnd);
}
  • 启动参数同样是在OnStartup函数中设置string[] args = e.Args;
  • 异常处理
//在程序级别捕获
protected override void OnStartup(StartupEventArgs e)
{base.OnStartup(e);DispatcherUnhandledException += App_DispatcherUnhandledException;
}private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{e.Handled = true;//异常已经处理
}
//在主窗口级别捕获,这样可以在程序级别重新启动主窗口
public MainWindow()
{InitializeComponent();AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{MessageBox.Show("dd");
}
//异常首先被程序级别捕获再传到窗口级别,如果在程序级别中不设置e.Handled = true;则会传到窗口级别,然后主程序挂掉。
//所以在主程序挂掉之前要重启

Label

TextBlock合理Label相比,更加轻量化,Lable常用在可以连接到指定地方,加下划线。

Image

img.Source = new ImageSourceConverter().ConvertFromString("path.png") as ImageSource;这种方式需要设置图片不能为资源
img.Source = new BitmapImage(new Uri("path.png", UriKind.RelativeOrAbsolute));

对DataGrid数据进行排序

var cvs=  CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);//获得默认视图if (cvs!=null && cvs.CanSort){cvs.SortDescriptions.Clear();cvs.SortDescriptions.Add(new System.ComponentModel.SortDescription("Name", System.ComponentModel.ListSortDirection.Descending));}

对DataGrid数据进行分组

var cvs=  CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);if (cvs!=null && cvs.CanGroup){cvs.GroupDescriptions.Clear();cvs.GroupDescriptions.Add(new PropertyGroupDescription("Group"));}

对DataGrid数据进行筛选

var cvs=  CollectionViewSource.GetDefaultView(dataGrid.ItemsSource);if (cvs!=null && cvs.CanFilter){cvs.Filter = (obj) =>{if (obj is Person per){return per.FirstName.Contans("TOM");}return false;};}

使用行为来扩展控件的功能

  1. nuget安装System.Windows.Interactivity.WPF
public class GrowTextBehavior:Behavior
{public int Size { get; set; }protected override void OnAttached()//增加事件{base.OnAttached();AssociatedObject.MouseEnter += AssociatedObject_MouseEnter;AssociatedObject.MouseLeave += AssociatedObject_MouseLeave;}protected override void OnDetaching()//减少事件{base.OnDetaching();AssociatedObject.MouseEnter -= AssociatedObject_MouseEnter;AssociatedObject.MouseLeave -= AssociatedObject_MouseLeave;}//缩小private void AssociatedObject_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e){AssociatedObject.FontSize -= Size;}//放大private void AssociatedObject_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e){AssociatedObject.FontSize += Size;}
}
  1. XAML
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"


在这里插入图片描述

使用DLL中的资源

Source="/LibraryName;component/Images/img.jpg"
在代码中访问Application.GetRemoteStream(new Uri("/MyLib;component/Img/R-C.png", UriKind.RelativeOrAbsolute));

资源管理

在Application.Resources中合并其他资源字典

使用系统的颜色和字体

{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}

其他线程更新UI

//下划线忽略不使用的变量
ThreadPool.QueueUserWorkItem(_ =>
{//其他现成更新UIDispatcher.BeginInvoke(new Action(()=> {this.btn.Content = "aa";}));
});

BackgroundWorker组件

BackgroundWorker worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;//支持取消
worker.DoWork += Worker_DoWork;//执行的任务事件
worker.RunWorkerCompleted += Worker_RunWorkerCompleted;// 执行的任务完成事件
worker.RunWorkerAsync(new Tuple(1, 2));
worker.WorkerReportsProgress = true;//设置进度可用
worker.ProgressChanged += Worker_ProgressChanged;//计算进度更新
worker.CancelAsync();//取消

定时更新界面

DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromSeconds(1.0);
dispatcherTimer.Tick += DispatcherTimer_Tick;
dispatcherTimer.Start();

WPF中放入Winform控件

加入引用WindowsFormsIntegration和System.Windows.Forms
xaml中



proForms.SelectedObject = txtWPF;

Winform中放入WPF控件

直接拖控件

WPF如何将DLL嵌入到exe文件中

1)使用第三方库的WPF应用程序
2)修改项目文件

%(ReferenceCopyLocalPaths.DestinationSubDirectory)%(ReferenceCopyLocalPaths.Filename)%(ReferenceCopyLocalPaths.Extension)

3)修改App.Xaml.cs

private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args){Assembly executingAssembly = Assembly.GetExecutingAssembly();var executingAssemblyName = executingAssembly.GetName();var resName = executingAssemblyName.Name + ".resources";AssemblyName assemblyName = new AssemblyName(args.Name); string path = "";if (resName == assemblyName.Name){path = executingAssemblyName.Name + ".g.resources"; ;}else{path = assemblyName.Name + ".dll";if (assemblyName.CultureInfo.Equals(CultureInfo.InvariantCulture) == false){path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path);}}using (Stream stream = executingAssembly.GetManifestResourceStream(path)){if (stream == null)return null;byte[] assemblyRawBytes = new byte[stream.Length];stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);return Assembly.Load(assemblyRawBytes);}}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly;}

C#调用win32API参考网站
http://www.pinvoke.net

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...