‘WPF’ 分类的存档
随着计算机硬件设备的高速发展,很多用户的计算机上可能安装着好几块网卡,但是我们如何知道用户访问外网时所使用的网卡呢? 我先给出这两个win32函数 这下有思路了吧,先通过GetBestInterface函数获得网卡的接口索引,再通过GetAdaptersInfo获得该网卡的信息。 虽然,有了思路,不过实现起来对于没有做过C++开发的朋友还是比较困难的,在这里,我给出了代码大家看看吧。 使用上面的方法就可以很容易的得到访问IP出口的网卡了。 代码下载
让.Net程序会说话,大家一定觉得是一件很困难的事情,不过,.Net Framework 4.0给我们带来了一个新的类库,System.Speech,可以让我们轻松的让计算机朗读出我们想要的内容。比如:一篇文章、一段说明,都不在话下。 首先添加System.Speech .Net类库引用 添加如下代码: 是不是很简单呢?呵呵,这个SpeechSynthesizer类不仅能读中文,英文也是很好滴。
将win7玻璃效果扩展到窗体内部,我们知道,默认情况下,玻璃区域仅在标题栏和窗体边框,在窗体内部区域是不会绘制的,但是有一个简单的方法可以扩展玻璃区域到窗体内部,就是使用DWM‘s API。 代码如下: MainWindow.xaml MainWindow.xaml.cs Win32.cs 效果: 代码下载
上一篇,我们介绍了如何将文件嵌入资源并读取。我们来介绍如何将流设置到WPF图片控件上。 废话不说了,看代码就清楚了。
如何用代码方式给RichTextBox获得获得设置字体、选中的字体的样式呢? 我就不多做解释了,给大家代码,看不懂就看注释吧。 已获取、设置前景色为例子: 其他的,如设置背景色、字体、字号、加粗、倾斜都可以按照这个思路写出来:
随着Windows7的普及,我们希望实现更多Windows7特有的一些效果如JumpList,本文介绍,如何实现JumpList效果。 我们新建一个WPF应用程序,在App.xaml中加入如下代码。 运行,结果: 这么简单就实现了JumpList效果,用代码如何实现呢? 代码: 这个是用代码的写法,因为JumpList是依赖于应用程序,最好写在App的Startup事件中。这个时候,我们会发现一个问题JumpList只能调用某个应用程序,如何才能调用内部的方法呢?我们可以在JumpTask加入参数,通过参数来实现当前实例中的方法的调用,使用参考我以前发布的一篇文章Winform/WPF实例中的相互操作来实现此功能。
选择正确的基类是至关重要的,可以为你节省很多时间!比较你将要实现控件的功能,说白了就是你将要实现的控件的功能跟那个控件最接近就用那个。下面列出了一些基本的控件类型,可供选择: 1.UIElement 最轻量级的基类,他支持Layout、Input、Focus、Events。 2.FrameworkElement 从UIElement派生增加了支持Style、tooltip、context menu,它是逻辑树的一部分,支持数据绑定、资源查找。 3.Control 最常见的控件基类,支持模板和前景颜色、背景颜色、字体。 4.ContentControl 支持Content属性,通常用于简单的内容容器。 5.HeaderedContentControl 支持Content和Header属性,用于Header属性的扩展内容,比如:Expander,TabControl,GroupBox等 6.ItemsControl 包含一个集合项,对于显示一个没有选择功能的动态列表是一个不错的选择。 7.Selector 一个ItemsControl,不同的是支持索引和选择的功能,可以实现ListBox、ComboBox、ListView、TabControl等。 8.RandeBase 显示一个值的Slider或ProgressBar的基类,增加了最大值、最小值的属性。
WPF控件供应商 Component Art DevExpress SyncFusion Infragistics Xceed Telerik Actipro DataGrid Infragistics Data Grid Xceed Data Grid Component One Data Grid Syncfusion Essential Grid Telerik RadGridView for WPF ComponentArt DataGrid Charts Infragistics xamChart Swordfish Charts Component One Chart Visifire Chart for WPF and Silverlight WPF Graph on Code Project Free 3D Chart Free High Performance 3D [...]
我们知道在Xaml中调用第三方控件的时候,需要先引入命名空间 如:xmlns:controls=”clr-namespace:MyControls;assembly=MyControls” 下面介绍一个新方法不需要这部操作,既可以直接使用MyControls命名空间的控件 我们只要在声明命名空间即namespace MyControls上面加入这段语句 [assembly: System.Windows.Markup.XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "MyControls")] 这段语句的意思就是将MyControls命名空间映射到http://schemas.microsoft.com/winfx/2006/xaml/presentation命名空间中,这里只映射了2006的命名空间,同理我们再映射2007,2008的命名空间。 [assembly: System.Windows.Markup.XmlnsDefinition("http://schemas.microsoft.com/winfx/2007/xaml/presentation", "MyControls")] [assembly: System.Windows.Markup.XmlnsDefinition("http://schemas.microsoft.com/winfx/2008/xaml/presentation", "MyControls")] 编译之后,我们就可以直接在Xaml使用MyControls里的控件了,因为,WPF默认会引用http://schemas.microsoft.com/winfx/2006/xaml/presentation命名空间,而我们自己写的MyControls命名空间也被映射到该命名空间内,所以,我们可以直接使用MyControls中的空间了。是不是很方便呢。
WPF在绑定ItemsSource在使用Refresh()刷新方法时,绑定的集合会被重新创建并显示到UI控件上,这样,在性能上就会有非常大的影响,为了避免这种现象,我们必须要尽量少的使用Refresh()刷新控件。 比如,这种现象,当我们要显示大结果集的时候,如果绑定的是List<T>这种不支持集合更改特性的数据源时,我们增加或删除一个项时,结果并不会马上显示出来,这就是由于ItemsSource并不知道,其绑定的数据集发生了变化,我们需要手动执行ItemsSource的Refresh()方法,来刷新控件,这样就会造成,所有相关对象会重新创建,造成性能上巨大的损失。 为了,避免这个现象,有一个很好的方法,就是使用ObservableCollection<T>这个集合来代替List<T>,这样,我们再增加或删除某一个项的时候,不需要使用Refresh()方法强制刷新控件,相关的更改就会显示在UI控件上,WPF则只会重新创建或删除该项,其他项则不会参加重新创建的操作,这样性能就会得到很大幅度的提升。 推荐在数据绑定的时候使用ObservableCollection<T>这个集合。