wpf

阅读 / 问答 / 标签

MFC,WTL,WPF,wxWidgets,Qt,GTK 各有什么特点

MFC乃曾经的老大,现在来看设计有点落后;原本可以做得更好用,但MS为了推COM而变得臃肿,而现在MS为了推.net更不愿意继续发展它。WTL基于ATL,ATL是COM组件的模版库,COM是C++应用中的毒瘤(明知有人会喷我,我依然坚持真理); WTL曾受MS打压,因为MS怕它的轻巧特性会妨碍推广.Net,现在不需要打压了,因为已经扶不上墙了。WPF:不是给C++用的。wxWidgets:小巧、小众、多bug;和MFC差不多,这是优点,也是死穴。Qt:库有点庞大,啥都有,信号和槽机制需要特殊的编译器搞;没能尽量复用C++已有的库,看重复的东西会人特别烦。(我个人最看好Qt)。GTK:两个字“难用”。

MFC,WTL,WPF,wxWidgets,Qt,GTK 各有什么特点

WTL都算不上什么Framework,就是利用泛型特性对Win API做了层封装,设计思路也没摆脱MFC的影响,实际上用泛型做UI Framework也只能算是一次行为艺术,这个思路下继续发展就会变得没法用了,比如 代码过于复杂,编译太慢,出错不好调试等问题难以解决。而且封装得也不完全,还是随处可见 HWND HDC之类的东西。用途主要是写一些很小的程序,或者作为其他UI框架的后端实现部分,比如我写过一个小框架用来做安装卸载程序,非常小,其中创建管理窗口部分是用WTL的。MFC是更高级点的Win API封装,比WTL封装彻底,很难见到HWND HDC了,也提供了不少实用工具类,比如高级控件,泛型容器,IO访问,网络协议等。除此之外,还提供了一些基本框架,比如 Document/View,这就是个MVC的简化版本,只有MV,但是对于数据的管理,消息的传递等又没有什么约束,导致Doc/View被用得乱七八糟。尤其是对事件处理的模型,消息映射是功能简陋,而且容易出错的方式,唯一优点是性能好。 从VC++ 1.X就有MFC了,那时整个UI界的设计思想都比较落后(除了Apple),MFC又背负了沉重的兼容性包袱,比如vc++ 1.52的MFC程序到了vc2003稍加修改都可以编译,导致MFC后期没有什么发展,就是沿着老的思路完善了些细节,添加了些组件,但是根本性的设计问题没有改进。GTK,这个吃了语言的亏,用C写面向对象实在是痛苦,虽然在思想上比MFC要先进了些,但是写出来的代码比MFC要罗嗦很多了。相比MFC,多了Layout的概念,事件处理上有了Signal/slot,虽然用起来很麻烦。wxWidgets,这个基本就是个跨平台的MFC,对各个平台的差异做了抽象,实际上后端大多还是用平台原生的API实现,好多控件都是直接用系统原生的。有wxWidgets for GTK+的版本,后端就是GTK+,wxWidgets就是一层壳。这也是wxWidgets的优点,它编译出来的程序发行包比较小,性能也不错。以上这些就是上世纪90年代的UI Framework技术水平了,至今它们也依然没有太多进步。下面来谈谈21世纪的技术。Qt,虽然它也是上世纪90年代出现的,但是它在21世纪有了长足的进步。应该说它的起点就比较高,一开始就定位跨平台,而且不满足于简单封装系统API,而是要自己创造出一套完整的API和框架,甚至要代替系统API,所以不仅仅是做UI,而是涉及到了APP开发所用到的所有东西,包括网络,数据库,多媒体,脚本引擎等。signal/slot是Qt发明的,这是事件通知模型里C++语言的最佳实现了,甚至我都觉得这该写进C++标准,估计C++委员会的老顽固们是从不写GUI的。早期的QT也是没有DirectUI的概念的,每一个QWidget都对应一个原生窗口,从Qt4.4开始,只有顶层QWidget才是原生窗口,而Child Widget是Alien Widget,只是个抽象的图层不对应原生窗口,这就实现了DirectUI的概念,很多图形效果也就变得可能了,比如窗口层叠透明效果。在4.8后实现了QPA(Qt Platform Abstraction),这就使移植Qt变得很容易,目前Qt是支持平台最多的框架没有之一。由于早期授权的问题,Qt对于开源社区不是很友好,导致推广不太顺利,直到它改成了LGPL方式,如果Qt能早点想开了,恐怕就没有wxWidgets的生存空间了。Qt的缺点也是有的,就是太大,不过可以自己剪裁,我可以把QT库剪裁到发行包压缩后2.5MB。WPF,微软在Win Form的思路上走到死胡同后,终于痛下决心用正确的方法开发UI库了。21世纪的UI一定是定义出来的,绝对不能是代码写出来的,所以有了XAML这个强大的定义工具,不但可以定义UI布局,还包括图形动画效果,消息响应方式等。配合C#这种优秀的语言,更是如虎添翼。但是问题也很明显,就是过于庞大,不仅开发时要用到庞大的IDE和设计工具,发行的安装包也十分巨大,所以目前还是很少有人拿他写通用软件客户端的,大多是做企业项目时写专用客户端。大概4-5年前吧疼讯曾经用WPF写了个QQ,但是只实现了基本功能就已经比C++客户端大好多了,而且运行缓慢,主要是太吃内存,而且那时WPF的优化还不充分。最后我想补充下真正的UI库之王,cocoa。Apple的成功有很多原因,其中之一就是cocoa,cocoa理念十分先进,而且出来得早,我都怀疑Qt和WPF有不少思想都是借鉴cocoa的。定义式的UI,用xib就可以定义UI的绝大部分细节,而且提供所见即所得的可视化设计工具。严格的MVC,而且定义非常清晰,分工明确。signal/slot,虽然不叫这个名字,但思想就是,而且真的是拖动鼠标就能connect。提供了ARC,闭包和反射,给UI开发带来巨大的便利性,当然这得益于Objective-C这个语言。再补充下 Borland的OWL和VCL。我是从Borland C++3.0和Delphi 1.0开始用的,那时的Borland看来很有前途的,可惜后来一系列决策失误导致现在这个公司几乎消失了,同学们不要再往这个坑里跳了。OWL曾经和MFC是竞争对手,设计思想也差不多,个人感觉OWL的API设计更优雅一点,但是在市场上OWL被MFC彻底击败。Delphi是神作,它在RAD(快速应用开发)领域长时间没有对手,直到BS架构取代CS架构。Delphi的特点就是简单、开发快,单纯就写个基本可用的应用来说,可能至今都没有比他更快的,但是缺点就是丑,基本大多数Delphi应用都是一大堆控件堆积在一起,很不美观,另外由于Pascal语言的限制无法和现有大量的C/C++代码融合。虽然后来有C++ Builder,但是Builder里简单和快的优点也消失了。Borland的C++编译器越做越差,导致后来开源项目都不太愿意兼容这个编译器了。VCL准确地说不是UI库,而是一套组件接口规范,类似COM ActiveX。delphi和C++builder都是基于这个规范构建了基础库。UI库是个很大的话题,够写好几本书来探讨的,我这里就是随便写点自己的感受。单纯讨论每个库的优劣是没有意义的,而是要放到具体的应用场景里来看,每个库都有自己擅长的场景。如果仅在Windows下,追求程序小巧,用WTL,不足的地方自己实现去吧,但是视觉效果就呵呵了。如果可以大一点,还要好看点,那就Qt。如果完全不在乎大小,只要视觉效果华丽,就用WPF,如果把开发工具价格也考虑进来,那么土豪才会选WPF呢。MFC就是个鸡肋了,除非你现有的工程师不会用别的,或者有历史遗留代码要保持兼容。如果要求跨平台,那么就用Qt,wxWidgets和GTK+跟现在的Qt比起来没有什么优势了。如果是iOS Android,那么最好用原生UI库,除非你写游戏。

WPF Page页面跳转问题

是个好问题,可以想一下,平时用浏览器的前进后退过程中,我们是希望页面重新刷新还是保留原来的状态?

C# wpf Frame 实现一次加载多个page

默认是可以加载的,但是显示在前台只会有一个最前页,除非这两个page能够在同一个屏幕的不同区域显示。

WPF 3D中如何选择模型的一部分并维护模型

我选择了一个方块,将方块显示为蓝色,同时屏幕坐上显示了点击方块后的操作。整个流程我处理了两个问题:1. 如何选择模型的这一部分2. 如何维护你选择的这个部分 问题1:如何选择模型的这一部分由于WPF 3D模型中只有Viewport3D对象有MouseButtonLeftDown事件,而模型的某个部分是没有这个事件的。因此需要使用首先VisualTreeHelper.HitTest来确定具体点击的是哪个模型,同时这个模型是需要给外部用的,因此我们自定义了一个ModelVisual3DSelectedEventHandler的事件给外部调用。 1 //自定义个一个模型选中的EventHandler 2 public class Visual3DEventArgs : EventArgs3 {4 public ModelVisual3D Visual3D { get; set; }56 public Visual3DEventArgs(ModelVisual3D modelVisual3D)7 {8 this.Visual3D = modelVisual3D;9 }10 }1112 public delegate void ModelVisual3DSelectedEventHandler(object sender, Visual3DEventArgs args);13 //....14 15 //声明Viewport3D的LeftButton事件16 ViewPort.MouseLeftButtonDown += ViewPort_MouseLeftButtonDown;1718 //Viewport LeftButton的函数19 void ViewPort_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs args)20 {21 Point mousePos = args.GetPosition(ViewPort);22 var hitParams = new PointHitTestParameters(mousePos);23 VisualTreeHelper.HitTest(ViewPort, null, ResultCallback, hitParams);24 }2526 //根据HitTest选中之后的处理27 private HitTestResultBehavior ResultCallback(HitTestResult result)28 {29 RayHitTestResult rayResult = result as RayHitTestResult;3031 if (rayResult != null)32 {33 var visual3D = result.VisualHit as ModelVisual3D;34 if (visual3D != null)35 {36 if (OnModelSelected != null)37 {38 OnModelSelected(this, new Visual3DEventArgs(visual3D));39 }4041 return HitTestResultBehavior.Stop;42 }4344 }45 return HitTestResultBehavior.Continue;46 } 2. 问题2:如何维护你选择部分我刚刚在Visual3DEventArgs中已经获得了选择的模型了,这时候我就可以对它进行操作了。或许数据库中有个模型叫"block1",查找数据等等.... 但是很悲催的是, 虽然在xaml文件中ModelVisual3D是有x:name的,但是ModelVisual3D本书是没有 ModelVisual3D.Name这个属性的,即使获取了这个模型,也只能对其进行基本的渲染,根本没有办法进行逻辑操作(例如根据数据库通信等)。 只有通过viewport3D.FindName(string name)才能获取对象! 解决办法是:我们自己可以维护一个模型名字表(其实就是个xml文件): dg01 dg02 dg04 然后定义一个返回名字的函数: 1 public Section GetSelSection(ModelVisual3D visual3D)2 {3 if (_context != null && _context.Sections != null && visual3D != null)4 {5 var viewPort = _context.Model.ViewPort;67 foreach (var section in _context.Sections)8 {9 if (viewPort.FindName(section.Name) == visual3D)10 {11 return section;12 }13 }14 }15 17 return null;18 } 我就可以通过GetSelSection(args.Visual3D)获得这个section对象了。对了,这个Section就是刚才XML文件的映射类。

WPF中,当Viewport2DVisual3D.Camera使用动画时为什么是冻结的

当你动画化Viewport2DVisual3D对象的“照像机”属性时,你会得到一个“错误操作异常”:冻结的对象不能被冻结“。  Freezable对象在有些情况下比如设置在样式中时会被冻结,有关Freezable对象,请参照以下MSDN的相关文档:  http://msdn.microsoft.com/en-us/library/ms750509.aspx  这里的原因就是WPF不会冻结Viewport2DVisual3D对象,WPF所做的就是制作一个“camera “冻结的副本并把它分配给对应的转换(underlying transformation),这些转换会在点击测试机制中取消Viewport2DVisual3D对象的点击性能,从而使其不能与用户交互。

wpf如何绑定ListBox!

给我点时间,一定给你个满意的答案!

c# wpf toolbar如何增加分隔条

你是说在Xaml中?在两个Button之间添加<Separetor />试试。如果是C#代码,试试toolBar.Items.Add(new Separator());

wpf中tooltip一直显示

网络问题。wpf软件在使用的时候,tooltip一直显示是软件在使用的时候网络异常导致的,只需要将网络关闭之后,重新连接进行使用即可恢复正常,不在出现tooltip。

WPF Mediaplayer 中 获取媒体自然持续时间的问题

这个问题是由于音频没有加载完造成的,OPEN的动作已经执行,但并没有OPENED,所以无法获取音频的时间,可以用一个死循环来判断 是否hastTimeSpan,如果为真,那么再获取 TimeSpan就不会报错了

为什么WPF opacity属性设置为0时窗体成黑色?

WPF窗体的外壳还是一个普通的Windows窗体,对它设置Opacity,设置的还是内部一个Surface的Opacity(其实是一个DirectX中的Surface)。楼主的需求,应该是去掉Window的边框再做。即设置AllowsTransparency="True" WindowStyle="None"然后自己画边框等等

我的安装代码是:XHNV-UATM-TT5R-E3FU-JWPF,序列号是:VS15R22-XYJLDC-3WC75VE-G9K5B4W

ACB0-EEEA-ECDB-735F-FCD3

c# WPF Ribbon中RibbonTab默认的是渐变色背景,怎么修改成纯色背景?

//System.Color是一个系统自定义的枚举,可以选择颜色。如果是在WPF编程中,则应该使用TextBox.Background属性,结果量个Brush,以实现过度色背景等各种不同效果的背景。

请教WPF4.5的RibbonWindow和Ribbon如何用

<ribbon:RibbonWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:prism="http://www.codeplex.com/prism" xmlns:nimax="http://cyberstone.com/nidaqmax" xmlns:ribbon="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:cmd="clr-namespace:ConfigrationStudio.Infrastructure.Command;assembly=ConfigrationStudio.Infrastructure" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Icon="/Resources/app.ico" mc:Ignorable="d" x:Class="ConfigrationStudio.Shell" Height="768" Width="1024" WindowState="Maximized" WindowStyle="SingleBorderWindow" Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="240"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <ribbon:Ribbon ContextMenu="{x:Null}" x:Name="Ribbon" Margin="0,4,0,4" prism:RegionManager.RegionName="RibbonRegion" Grid.ColumnSpan="2" Title="自动化集成配置环境"> <ribbon:Ribbon.QuickAccessToolBar> <ribbon:RibbonQuickAccessToolBar VerticalAlignment="Center"> <ribbon:RibbonButton Command="{x:Static cmd:GlobalCmds.Save}" SmallImageSource="/Resources/save.png"/> </ribbon:RibbonQuickAccessToolBar> </ribbon:Ribbon.QuickAccessToolBar> <ribbon:Ribbon.ApplicationMenu> <ribbon:RibbonApplicationMenu SmallImageSource="/Resources/StartMenu.png"> <ribbon:RibbonApplicationMenuItem Header="退出" ImageSource="/Resources/exit.png" Command="{x:Static cmd:GlobalCmds.Exit}"/> </ribbon:RibbonApplicationMenu> </ribbon:Ribbon.ApplicationMenu> <ribbon:RibbonTab Header="文件" prism:RegionManager.RegionName="FileExtenGroupRegion" > <ribbon:RibbonGroup Header="配置文件"> <ribbon:RibbonButton LargeImageSource="/Resources/openfolder.png" ToolTip="打开配置文件" Label="打开" Command="{x:Static cmd:GlobalCmds.OpenFile}"/> <ribbon:RibbonButton LargeImageSource="/Resources/addfile.png" ToolTip="新建配置文件" Label="新建" Command="{x:Static cmd:GlobalCmds.NewFile}"/> <ribbon:RibbonButton LargeImageSource="/Resources/save.png" ToolTip="保存当前配置文件" Label="保存" Command="{x:Static cmd:GlobalCmds.Save}"/> <ribbon:RibbonButton LargeImageSource="/Resources/saveall.png" ToolTip="当前配置文件另存为" Label="另存为" Command="{x:Static cmd:GlobalCmds.SaveAs}"/> </ribbon:RibbonGroup> <ribbon:RibbonGroup Header="工具" prism:RegionManager.RegionName="FileToolRegion"> <ribbon:RibbonButton LargeImageSource="/Resources/test.png" ToolTip="测试当前配置文件" Label="测试" Command="{x:Static cmd:GlobalCmds.Test}"/> <ribbon:RibbonButton LargeImageSource="/Resources/stoptest.png" ToolTip="停止测试当前配置文件" Label="停止测试" Command="{x:Static cmd:GlobalCmds.StopTest}"/> </ribbon:RibbonGroup> <ribbon:RibbonGroup Header="通用"> <ribbon:RibbonButton LargeImageSource="/Resources/editfile.png" ToolTip="退出应用程序" Label="复制" Command="Copy"/> <ribbon:RibbonButton LargeImageSource="/Resources/cut.png" ToolTip="退出应用程序" Label="剪切" Command="Cut"/> <ribbon:RibbonButton LargeImageSource="/Resources/Paste.png" ToolTip="退出应用程序" Label="粘贴" Command="Paste"/> </ribbon:RibbonGroup> <ribbon:RibbonGroup Header="程序"> <ribbon:RibbonButton LargeImageSource="/Resources/exit.png" ToolTip="退出应用程序" Label="退出" Command="{x:Static cmd:GlobalCmds.Exit}"/> </ribbon:RibbonGroup> </ribbon:RibbonTab> <ribbon:RibbonTab Header="变量" prism:RegionManager.RegionName="VariableExtenGroupRegion" > <ribbon:RibbonGroup Header="基本"> <ribbon:RibbonButton LargeImageSource="/Resources/exit.png" ToolTip="退出应用程序" Label="退出" Command="{x:Static cmd:GlobalCmds.Exit}"/> </ribbon:RibbonGroup> </ribbon:RibbonTab> <ribbon:RibbonTab Header="触发" prism:RegionManager.RegionName="TriggerExtenGroupRegion" > <ribbon:RibbonGroup Header="基本"> <ribbon:RibbonButton LargeImageSource="/Resources/exit.png" ToolTip="退出应用程序" Label="退出" Command="{x:Static cmd:GlobalCmds.Exit}"/> </ribbon:RibbonGroup> </ribbon:RibbonTab> </ribbon:Ribbon> <ItemsControl Grid.Row="1" Margin="5,0,5,5" prism:RegionManager.RegionName="NavgateRegionItem" Background="White" BorderBrush="Gray" BorderThickness="1"> <Button Margin="2" Content="标准IVI仪器驱动配置"/> </ItemsControl> <GridSplitter Grid.Row="1" HorizontalAlignment="Right" Width="5" Background="LightGray"/> <ContentControl Margin="0,0,5,0" Grid.Row="1" Grid.Column="1" prism:RegionManager.RegionName="WorkspaceRegion"/> </Grid></ribbon:RibbonWindow>

wpf中Ribbon控件的使用问题

把DNBSoft.WPF.RibbonControl改成你的命名空间吧。

C# wpf 中某个菜单如何隐藏啊

ToolStripMenuItem.Visibility = Visibility.Hidden;

大哥 我在WPF 窗体上添加的Menu控件中加了四个MenuItem 我想让前三个左对齐 后一个右对齐 这个能实现吗

设置最后一个margin试试

wpf style 问题:请问下面是什么问题导致的?比人新手,忘多多指教 ↖(^ω^)↗

这个应该不是wpf style 的问题,应该是你插入的gif图片的问题

wpf怎么做窗体由大变小退出的特效?

用Storyboard的话。。 bool _closinganimation = true; protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { e.Cancel = _closinganimation; _closinganimation = false; base.OnClosing(e); System.Windows.Media.Animation.Storyboard sb = new System.Windows.Media.Animation.Storyboard(); System.Windows.Media.Animation.DoubleAnimation dh = new System.Windows.Media.Animation.DoubleAnimation(); System.Windows.Media.Animation.DoubleAnimation dw = new System.Windows.Media.Animation.DoubleAnimation(); System.Windows.Media.Animation.DoubleAnimation dop = new System.Windows.Media.Animation.DoubleAnimation(); dop.Duration = dh.Duration = dw.Duration = sb.Duration = new Duration(new TimeSpan(0, 0, 2)); dop.To = dh.To = dw.To = 0; System.Windows.Media.Animation.Storyboard.SetTarget(dop, this); System.Windows.Media.Animation.Storyboard.SetTarget(dh, this); System.Windows.Media.Animation.Storyboard.SetTarget(dw, this); System.Windows.Media.Animation.Storyboard.SetTargetProperty(dop, new PropertyPath("Opacity", new object[]{})); System.Windows.Media.Animation.Storyboard.SetTargetProperty(dh, new PropertyPath("Height", new object[]{})); System.Windows.Media.Animation.Storyboard.SetTargetProperty(dw, new PropertyPath("Width", new object[]{})); sb.Children.Add(dh); sb.Children.Add(dw); sb.Children.Add(dop); sb.Completed += (a, b) => { this.Close(); }; sb.Begin(); }刚敲的可能效果还不太好。。见谅。。

WPF Storyboard播放多个DoubleAnimation出现卡顿

没有贴代码,以下只能猜测。两个方向:动画的处理方式是否可以优化,动画轨迹的点处理是否可以优化?DoubleAnimation的List,是否使用的是同一个Storyboard实例?如果是,是否在Storyboard的Completed之后清除了已经完成DoubleAnimation?如果不清除,将会导致Storyboard每次要处理的Animation不断累积。可以缩减DoubleAnimation的集合的长度,观察执行效果,查看动画轨迹的处理是否影响动画。

WPF 里 Storyboard 是什么,具体用法是什么?

时间线,做动画用的给你网址你看看吧http://msdn.microsoft.com/zh-cn/library/ms742868.aspx

C# WPF 使用Storyboard类的引用

参考System::Windows::Media::Animation::Timeline的CurrentStateInvalidated 事件.Storyboard 继承了 Timeline 的.

wpf怎么清除Canvas画布

如果是需要用brush进行erase那么用System.Windows.Controls.InkCanvasEditingMode.EraseByStroke如果是希望Clear的话,用Strokes.Clear即可Strokes是指和`InkCanvas binding`的对象<InkCanvas Strokes="{Binding Strokes}" ... />

wpf的Generic只能放在Themes文件夹吗?

放在Themes会自动调用,放其他文件夹需要手工调用

C# wpf 放在StackPanel中的确定位置

Button btn1 = new Button() { Name = "btn1", Content = "btn1", Width = 150, Height = 150 }; Button btn2 = new Button() { Name = "btn2", Content = "btn2", Width = 150, Height = 150 }; this.RegisterName("btn1", btn1); this.RegisterName("btn2", btn2); stackPanel1.Children.Add(btn1); stackPanel1.Children.Add(btn2); Button _btn1 = (Button)stackPanel1.FindName("btn1"); Button _btn2 = (Button)stackPanel1.FindName("btn2"); int cc =0; if (cc==0) { _btn1.HorizontalAlignment = HorizontalAlignment.Left; _btn2.HorizontalAlignment = HorizontalAlignment.Right; } else { _btn1.HorizontalAlignment = HorizontalAlignment.Right; _btn2.HorizontalAlignment = HorizontalAlignment.Left; }

WPF Canvas子控件Label无法居中

在blend4里面编辑试试,把label拖到中间,看看代码然后变化

WPF中如何实现多窗口通讯、传值?

public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //第二个窗口的引用 Window2 w2 = null; private void button1_Click(object sender, RoutedEventArgs e) { //是第一次就打开新的窗口 if (w2 == null) { w2 = new Window2(textBox1.Text); w2.Show(); } else { //不是第一次,就直接更新 窗口2的textbox w2.UpData(this.textBox1.Text); } } }public partial class Window2 : Window { public Window2() { InitializeComponent(); } public Window2(string text) { InitializeComponent();//设置text 的值 this.textBox1_inWindow_2.Text = text; } public void UpData(string str) {//设置text 的值 this.textBox1_inWindow_2.Text = str; } }总结:就是要第二个窗口提供一个方法,这个方法用来更新它的UI.第一个窗口去调用这个方法就可以了。

wpf如何弹出选择对话框

02MsgBoxResult = MessageBox.Show("请选择你要按下的按钮",//对话框的显示内容02 02"提示",//对话框的标题02 02MessageBoxButtons.YesNo,//定义对话框的按钮,这里定义了YSE和NO两个按钮02 02MessageBoxIcon.Exclamation,//定义对话框内的图表式样,这里是一个黄色三角型内加一个感叹号02 02MessageBoxDefaultButton.Button2);//定义对话框的按钮式样 02if (MsgBoxResult == DialogResult.Yes)//如果对话框的返回值是YES(按"Y"按钮)02{02this.label1.ForeColor = System.Drawing.Color.Red;//字体颜色设定 02label1.Text = " 你选择了按下”Yes“的按钮!";02}02if (MsgBoxResult == DialogResult.No)//如果对话框的返回值是NO(按"N"按钮)02{02this.label1.ForeColor = System.Drawing.Color.Blue;//字体颜色设定 02label1.Text = " 你选择了按下”No“的按钮!";02}在WPF中就报错,请问这段代码放在WPF中如何改,谢谢! C#语言131 次浏览 2010-04-15 13:085 个回答 我已经完成了,自己顶一下。谢谢了 2010-04-16 09:52 推荐: 0 次 有帮助? 请推荐 JF~~~~ 2010-04-16 10:13 推荐: 0 次 有帮助? 请推荐 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)02{02if (flag)02{02MessageBox.Show("采集正在进行,真的要退出吗?!", "提示", MessageBoxButton.YesNo); 02if (DialogResult.Value)//如果对话框的返回值是YES(按"Y"按钮)02{02this.Close();02}02else02{02e.Cancel = true;02}02}02else02{02this.Close();02}02} 2010-06-11 16:32 推荐: 0 次 有帮助? 请推荐 看来,WPF的 精华被糟蹋了,这么好的东西,被你们当成了WINFORM用! 2010-07-06 15:07 推荐: 0 次 有帮助? 请推荐

WPF高级编程的序言

对于使用Microsoft技术的开发人员来说,这是一个激动人心的时刻。众多新平台、新技术以及新工具的不断涌现,使开发人员的舞台迅速扩大。其中,来自微软的一个新平台是.NETFramework3.0,WindowsPresentationFoundation(WPF)是该平台的一个核心组件,也是本书的主题。WPF为开发人员和设计人员提供了一个统一的平台,便于他们创建能够充分利用现代PC硬件设备的图形功能的多媒体(rich-media)应用程序。在过去的几十年中,我们经历了使用命令行界面的漫长时间。今天的应用程序用户,希望使用新型的、吸引人的可视化交互界面,其中部分原因是他们在Internet上面对的是媒体和内容都很丰富的用户界面。WPF正是为迎合这种需求而诞生的,它可以综合使用多种类型的媒体,包括动画、视频和音频,来创建富用户界面。此外,通过使用一种新的标记语言XAML和一套新的设计工具MicrosoftExpressionBlend,设计人员和开发人员能够在开发同一个项目时实现无缝合作,这在以前是不可能的。在WPF推出之前,设计人员创建各种图形元素,并将这些图形元素以图像文件的形式交给开发人员,然后开发人员使用这些图形元素构建用户界面。设计人员可以使用ExpressionBlend设计用户界面,并将设计模型保存为XAML文件,然后只需将XAML文件交给开发人员,开发人员再在VisualStudio中使用WPF编写代码即可。本书将详细讲解WindowsPresentationFoundation的概念和构成组件。通过本书可以学习如何创建富用户界面,如何使用WPF提供的各种新控件,以及如何利用WPF提供的新内容模型。本书将探讨WPF对象模型,以及WPF新提供的子系统,例如附属属性系统(dependencypropertysystem)和事件传递模型(routedeventmodel)。在本书中还将介绍如何开发和配置用于桌面和浏览器的WPF应用程序。本书中还包括新的XAML语法(XAML是一种为WPF应用程序定义用户界面的新标记语言,不管这些应用程序是基于Windows环境的还是面向Web的)、ExpressionBlend使用基础和Microsoft新提供的图形设计工具。WPF是一个非常大的平台,本书将尽可能多地涉及其各个方面,我们的目标是使读者不仅了解WPF平台提供了哪些内容,而且学会如何使用该平台。当然,因为WPF是一个很大的平台,所以本书中不可能囊括全部内容,但是我们力争让读者掌握开始使用WPF的一些基本知识。本书不仅有趣、富有教育性,而且能够为读者使用WindowsPresentationFoundation开发富用户界面打下坚实的基础。本书读者对象本书主要面向准备学习使用Microsoft新的呈现架构(presentationframework)WPF开发应用程序的.NETFramework开发人员。对于正在考虑使用新的ExpressionBlend系列设计工具的设计人员,以及那些想了解这些工具是如何加强与设计人员合作的开发人员,本书也是很有帮助的。对于没有.NET开发经验的程序员,本书在学习新的XAML语法上有一定的参考价值。但是对于这部分读者,书中的大部分内容比较高级,因此建议先学习.NET2.0,作为学习WPF的第一步。本书适合以下几类读者:●准备学习WPF新平台的Microsoft.NET应用程序开发人员。●准备研究MicrosoftExpressionBlend工具,学习使用WPF及相关工具所提供的协作特性的设计人员。此外,熟悉以下相关技术的人员,也很适合阅读学习本书:●Microsoft.NETFramework●C#●Web服务●HTML●CSS以上读者,对.NETFramework和C#有一个基本理解是必需的,而熟悉Web服务、HTML标记语言以及CSS概念对于学习本书中的内容有帮助,但不是必需的。对于没有.NETFramework和C#基础的开发人员,可先学习《.NETFramework2.0高级编程》和《C#2005高级编程(第4版)》(均由清华大学出版社引进并出版)这一类的书籍。读者并不需要逐章学习本书。我们建议先学习第1章至第3章,对WPF和XAML有一个基本理解,然后浏览后面的几章,从中挑选出您感兴趣或需要的部分进行学习。本书组织结构本书先介绍了相关背景,包括Microsoft为什么以及怎样从长期以来使用的Win32平台转向WPF。然后,对WPF及其核心组件和子系统进行了概述,接下来介绍了ExpressionBlend工具的使用,并通过示例演示了如何创建富用户界面。后续几章具体针对与WPF开发相关的各个主题。在本书的最后简要介绍了与WPF平行的其他两个组件,这些组件共同构成了.NETFramework3.0这一重要而又强大的平台。本书各章内容如下所示:●第1章 WPF概述  对于曾经开发过Windows应用程序的程序员而言,本书展示了开发Windows应用程序的一些精彩的新变化。此外,对曾经开发过Web应用程序的程序员来说,本书提供的开发方式更令人激动。  Windows Presentation Foundation,也称做WPF,是下一代图形平台。基于该平台可以构建运行于Windows Vista之上的Windows应用程序和Web应用程序,Windows Vista是Microsoft最新发布的新一代操作系统。WPF为建立优雅的并且非常灵活的用户体验提供了基础,这种用户体验是通过同时使用用户界面、应用程序逻辑、文档以及多媒体实现的。  注意:  尽管WPF最初的目标是用于Windows Vista平台,但是作为.NET Framework 3.0(即以前的Win FX)的一部分,WPF也可以在Windows XP和Windows Server 2003平台上使用。  通过使用XAML与Microsoft Expression Designers等工具,应用程序的界面和功能可以得到进一步加强,这些工具使设计人员和开发人员可以同时开发用户界面与应用程序逻辑,从而共同提供完美的用户体验。  本章对WPF进行概述,包括以下内容:  Windows API的演变。  .NET Framework 3.0,基于Windows开发的下一代API。  WPF体系结构与开发模型。  XAML,支持WPF开发的声明式语言。  开发WPF应用程序的相关工具。  1.1 Windows API的简要历史  Windows API为应用程序开发提供了Windows操作系统支持的核心功能,主要用于C/C++语言的开发,Windows API是应用程序和Windows之间最直接的交互机制。  Windows API包含以下功能组合:  基本服务——提供对计算机核心资源的访问,例如内存、文件系统、设备、处理器以及线程等。  ●第2章,“WPF与.NET编程”--本章首先介绍了构建与运行WPF应用程序的需求,然后是应用程序的各子系统,例如附属属性与事件传递系统。此外,还介绍了WPF提供的各种控件,以及如何使用平台提供的新结构修改和扩展这些控件。●第3章,“WPF应用程序深入剖析”--本章介绍了在WPF中可以使用的各种应用程序模型,例如可以独立运行的与基于浏览器的应用程序。对相关程序文件及配置设置都进行了剖析,从而使读者可以快速理解并能开发WPF应用程序。●第4章,“使用MicrosoftExpressionBlend构建富用户界面:第一部分”--本章介绍了WPF应用程序设计人员可以使用的新工具,重点介绍了MicrosoftExpressionBlend。在本章中读者可以了解到ExpressionBlend提供的设计环境,以及工程文件结构。本章内容还包括创建矢量图形、布局、动画和控件。●第5章,“使用Microsoft ExpressionBlend构建富用户界面:第二部分”--本章在第4章介绍的相关内容的基础上,介绍了如何为程序添加交互功能以处理用户输入、事件与命中测试。本章还给出了一系列的动画示例程序,以及与WPF绘图相关的API。本章还演示了ExpressionBlend与VisualStudio2005提供的协作特性。●第6章,“特殊效果”--本章探讨了WPF提供的丰富功能与特殊效果,包括画刷、位图效果以及变换等。有了这些功能,使用WPF可以很容易地快速创建富用户界面。●第7章,“自定义控件”--本章专门讲解了在WPF中自定义控件的开发。通过模板与类型的扩展支持,在WPF中自定义控件所需做的工作是很少的。但是在很多情况下需要创建自定义控件。本章不仅介绍如何创建自定义控件,还介绍了如何确定是否使用模板与类型等内置功能的支持。这些内置功能是非常强大的。●第8章,“WPF企业开发”--本章探讨了使用WPF开发企业级应用程序时需要考虑的许多问题。应用程序模型、配置、运行环境、安全考虑、导航、状态管理以及本地化等内容,在本章中都进行了探讨。●第9章,“安全”--本章探讨了WPF的安全特性。WPF应用程序的安全主要与所选择的程序类型和运行环境有关。本章内容包括操作系统安全、CAS安全、Internet安全沙箱以及ClickOnce安全等。●第10章,“WPF与Win32交互”--本章主要针对WPF应用程序与已存在的Win32应用程序之间的交互问题。本章将解答如何在Win32应用程序中使用WPF,以及如何在WPF应用程序中使用Win32等问题。通过学习本章,读者将了解到在WPF与Win32应用程序中HWND的区别。●第11章,“高级开发主题”--本章将深入研究本书中涉及的有关问题。首先深入分析WPF体系结构,介绍WPF架构中重要的类,例如Application类、DependencyObject类。然后深入探讨XAML的语法与结构,以及WPF应用程序中的多线程问题。最后,深入分析了.NETFramework3.0的其他两个组件:WindowsWorkflowFoundation与WindowsCommunicationFoundation。使用本书的条件为了开发WPF应用程序,以及创建本书中的示例程序,必须首先安装以下软件:●WindowsSDK●.NETFramework3.0运行时组件●带有OrcasCTPWinFX开发工具的VisualStudio2005或OrcasreleaseofVisualStudio2005注意:在本书第2章中将给出上述所需软件的更多细节,以及介绍如何获取这些必需的组件。

关于WPF内存溢出

RenderTargetBitmap composeImage = new RenderTargetBitmap(1080,505, 0, 0, PixelFormats.Pbgra32);public RenderTargetBitmap(int pixelWidth,int pixelHeight,double dpiX,double dpiY,PixelFormat pixelFormat)参数pixelWidth类型:System.Int32位图的宽度。pixelHeight类型:System.Int32位图的高度。dpiX类型:System.Double位图的水平 DPI。dpiY类型:System.Double位图的垂直 DPI。pixelFormat类型:System.Windows.Media.PixelFormat位图的格式。var path = @"E:UsersMgenPicturesmgenx.jpg";//读取图像BitmapSource bitmap = new BitmapImage(new Uri(path, UriKind.Absolute));//创建RenderTargetBitmapvar rtbitmap = new RenderTargetBitmap(bitmap.PixelWidth, bitmap.PixelHeight, bitmap.DpiX, bitmap.DpiY, PixelFormats.Default);

wpf和vue哪个简单

之前要是没有web前端经验,Vue比较简单。WPF是微软的.net平台中的一个桌面客户端应用程序框架,经常用于企业开发windows桌面客户端,广泛应用于中小企业快速开发一款工具,本人也是比较喜欢利用WPF开发一些小工具。

会winform再学wpf简单吗

会winform再学wpf简单。WPF是微软推出的基于Windows的用户界面框架,属于NETFramework3.0的一部分,所以会winform的基础上学wpf是简单的。

wpf应用程序属于b/s 还是c/s

cs,如果是Silverlight(wpf/e)可以算做BS(air)

为什么WPF里面提供XAML技术?

方便显示端的开发啊,分离代码和设计,提供灵活的界面形式,这是我的感受~

c# wpf代码怎么嵌入EXE应用程序?

using System.Diagnostics; //需要添加这行引用,关于线程的private void button1_Click(object sender, EventArgs e){string path = @"C:Program FilesTencentQQQQ.exe";//这个path就是你要调用的exe程序的绝对路径System.Diagnostics.Process process = new System.Diagnostics.Process();process.StartInfo.FileName = "qq.exe";process.StartInfo.WorkingDirectory = path;process.StartInfo.CreateNoWindow =true ;

wpf怎么openfiledialog

Microsoft.Win32空间下有OpenFileDialog的。

WPF到来了,WEB开发会面临重新洗牌吗?(转)

但WPF将会顺风顺水的成功,重新掀起一场GUI领域的大洗牌,我看结果未必。 WPF不乏创新,大有气吞河山、一统WEB以及桌面软件的雄心壮志,但个人认为正如微软的.NET战略一样,规模过于庞大,同时要在两个战场开战,很难在短期内完成既定目标。而技术领域的创新是日新月异的,如果一项技术在短期内不能迅速得到认同,那么就很快有了竞争者,沦为过渡的技术。 目前,微软籍其在桌面软件上的绝对优势,理论上应该可以比较迅速的推广其WPF,但要想挑战其他技术在Web上的统治地位应该难度较大。一方面来看,现有的技术所具有的简单性和标准化已经深入人心;另一方面,WPF作为微软独有的技术,截至目前尚不能看到完整的规格说明。同时,.NET下尚不能拿出能与 PHP,PYTHON, RUBY竞争的动态语言,极具竞争性的VB也沦为了C#的Backup,总不能让众多ASP.NET的Fans拿C#等来和PHPer们拼灵活性吧,何况就.NET现有的类库规模,仍不能和Java社区的力量相比较。在轻便性,功能全面性上.NET占不了优势,那所能依赖的就只剩下平台了,而众所周知 Windows并不是WEB服务器运行的最好平台,Linux才是。 从个人的体验来看,学习微软的技术会有种先易后难的感觉,为什么呢?对于一些初级,共通性的问题,微软通过层层包装,给出了简单的实现方法,使你能获得最好的体验,而对于一些较有深度的问题,则需要你揭开包装,重新理解原理后找到解决方法。过程固然不错,但容易导致大量的不求甚解并使许多人永远停留在初级的阶段,这对于新技术的广泛应用并不是好事。ASP.NET作为WEB开发的一项技术,把HTML包装的非常好,基本需要的都有了,但在我们需要工具箱之外的控件时,我们发现除了需要学习C#,我们还要学习更多的东西,因为没有任何统一的方法来解决所有复杂的问题。ASP.NET如此,WPF也必将如此。

新手学winform好还是WPF好

目前winform用的比较多,这是因为它出来的比较早些,一些产品都是采用这个。wpf界面比较漂亮,现在更新比较快,而且界面和后台都可以分开,后面会慢慢兴起的。建议你先学winform,然后在看看wpf,因为winform懂了,wpf就简单啦,没有多大区别只能说各有千秋吧,WPF做出来的画面更炫,但是耗内存;WinForm相对简单点; 如果从学习的角度,为什么之学一个呢,如何之学一个了,他们都是相通的,学会了一个,学另个也会很快,关键是在具体项目用哪一个。winform和wpf的差别就在界面上;wpf界面可配置性强,可以减少很多繁琐的代码,比如赋值, 当然就牺牲了一定的效率。后台的一些业务逻辑、什么访问数据库,没差别。 至于学哪个好吗,项目需要哪个、领导需要哪个就学哪个

控制台应用程序 Windows 窗体应用程序 WPF应用程序,请问这三个有什么区别呀???

一、指代不同1、控制台应用程序:是为了兼容DOS程序而设立的,这种程序的执行就好像在一个DOS窗口中执行一样,没有自己的界面。2、Windows 窗体应用程序:在用户计算机上运行的客户端应用程序,可显示信息、请求用户输入以及通过网络与远程计算机进行通信。3、WPF应用程序:是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。二、功能不同1、控制台应用程序:就是能够运行在MS-DOS环境中的程序。控制台应用程序通常没有可视化的界面,只是通过字符串来显示或者监控程序。2、Windows 窗体应用程序:Windows窗体充分利用公共语言运行库的安全特性。在浏览器中运行的不可信控件和用户硬盘上安装的完全可信的应用程序。3、WPF应用程序:提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。三、特点不同1、控制台应用程序:常常被应用在测试、监控等用途,用户往往只关心数据,不在乎界面。2、Windows 窗体应用程序:应用程序开发中最常见的情形之一是在窗体上显示数据。Windows窗体对数据库处理提供全面支持。可以访问数据库中的数据,并在窗体上显示和操作数据。3、WPF应用程序:是基于DirectX引擎的,支持GPU硬件加速,在不支持硬件加速时也可以使用软件绘制。参考资料来源:百度百科-WPF参考资料来源:百度百科-windows窗体应用程序参考资料来源:百度百科-控制台程序参考资料来源:

自学C#WPF怎么获得编程的完整经验?

如果不是工作需要,不建议学 WPF。它相对于 ASP.NET Core 来说找工作的路径更窄。ASP.NET Core 技术栈工作机会更多,学起来也比 WPF 更轻松,更容易找到成就感。 另外,ASP.NET Core Blazor 也可以开发桌面应用,基于 WASM,性能可以接近原生,可以满足大部分操作实时性要求较高的场景。 目前微软定位 .NET 平台未来的桌面应用的产品线主要是 MAUI、WinUI 和 Blazor。除了 Blazor,MAUI、WinUI 和 WPF 技术点和编程思想都差不多,像 Prism 这类的框架也可以通用,基本上可以一学多用。所以,只要你熟悉其中之一,不管后面主流 .NET 原生桌面技术框架怎么变化,你都可以轻松切换。 如果你毅然要学习 WPF,并“ 获得编程的完整经验 ”,下面是我觉得适用于大多数技术学习的通用路径: 1、学习语言基础(C#),看书或看视频都可以,网上资源很多。 2、学习框架(WPF、Prism 等)的使用,同时要掌握框架的编程思想。WPF 框架相关的书比较少,即使有也很老旧,可以去 B 站找找视频教程。 3、学习和模仿优秀的开源项目,从易到难,去 GitHub 找开源项目研究,然后参考模仿,自己动手做一个类似的项目。 4、整理自己学到的技能和知识点,经过整理后,用文章或视频的方式讲述给其他人看。制定计划,不断坚持。 以上,个人浅见,仅供参考。 Maui是一个高层次框架,底层在Windows上是用winUI3,在其他平台上是用其他平台的UI组件,不是一个级别的东西,不要搞混了 买本《实战》之类的书参考一下,当然最好的经验必须从实践中来。自己尝试写一个项目,比如把书上的例子弄完善,做过自然知道什么是需要懂的。反正你不是求职,慢慢来。

wincc添加wpf控件

wincc添加wpf控件?WPF1.新建一个用户控件非常简单,可以右键项目添加一个用户控件(程序集内的用户控件),也可以右键解决方案添加用户控件(非同一个程序集),之后在用户控件中添加自己需要的控件就可以了。2.添加好的用户控件在引用后才能使用。 语法: 自定义类或程序集映射语法:xmlns【:映射前缀】=”clr-namespace:【命名空间】;assembly=【程序集名称】“ (注:非同一个程序集内需要引用用户控件的Dll) 映射到当前程序集的语法:xmlns【:映射前缀】=”clr-namespace:【命名空间】” xmlns:u1="clr-

用WPF 如何弹出文件选择对话框

c#有专门打开文件的对话框类:OpenFileDialog open = new OpenFileDialog();//定义打开文本框实体 open.Title = "打开文件";//对话框标题 open.Filter = "文件(.txt)|*.txt|所有文件|*.*";//文件扩展名 if ((bool)open.ShowDialog().GetValueOrDefault())//打开 { //成功后的处理 }

现在WPF应用开发怎么样,未来前景如何?

《WPF编程宝典》《WPF揭秘》《WPF程序设计指南》后面两个几年前就出来了,前一个也出来一段时间了。WPF经历了好几年了,已经比较完善——只不过对机器的性能有要求,程序启动速度会慢点,但运行速度还成。

2022年qt和wpf哪个更好用

qt更好用。是面向对象的Qt对于用户开发而言是十分方便的,因为Qt良好的封装机制令Qt的模块化程度非常高并且可重用性好,而且在Qt中也提供了一种称为signals/slots的安全类型用以代替了callback,这样子各个元件之间的协同工作都会变得简单,Qt具有丰富的API在Qt中包括了至少250个的C++类,并且还提供了基于模板,甚至还包括正则表达式的处理功能。

wpf 支持移动端吗

不支持,移动端不能安装.net.移动端的话可以使用xamarin或者.net core这两种c#的跨平台开发方式,都是c# 学习成本 相当于wpf

wpf 怎么最小化到任务栏

窗口,属性,设置为可最小化

如何在WPF中调用Winform控件

功能实现主要分三步:1、添加两个引用:WindowsFormsIntegration.dll(负责整合WPF和Windows)、System.Windows.Forms.2、在 XAML文件中添加两个引用(粗体部分):<Window x:Class="CrossBowDemo.MainWindow" xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Hosting Windows Forms Control In WPF" Height="300" Width="650" ResizeMode="NoResize" Loaded="WindowLoadedHandler" >< /Window>3、在XAML编码区实现你想添加的控件: 原文添加的是DataGridView控<wfi:WindowsFormsHost> <wf:DataGridView x:Name="Dg" Dock="Fill" SelectionMode="FullRowSelect"> </wf:DataGridView> </wfi:WindowsFormsHost>

wpf画面不允许点击

WPF 自诞生以来就带着微软先生的傲慢。微软说 WPF 支持触摸,于是 WPF 就真的支持触摸了。对,我说的是“支持触摸”,那种摸上去能点能动的;偶尔还能带点儿多指的炫酷效果。但是,WPF 推出那会儿,绝大部分开发者都还没有触摸屏呢,开发个程序要怎么验证支不支持触摸呢?微软先生无奈地决定——你写鼠标的代码就好了,我帮你转换!于是……一大波 BUG 袭来……WPF 触摸失效的分类我将 WPF 的触摸失效总结成三种不同的类型。触摸下 Stylus/Touch 事件正常触发,但不提升为 Mouse 事件;导致仅使用 Mouse 事件的控件无法使用触摸下 Stylus/Touch 有触发,但触发点位置在 (0, 0) 处或上一个触摸点处;导致即使触发了,当前控件也收不到触摸下无 Stylus/Touch 事件,也不提升为 Mouse 事件,但鼠标下有 Mouse 事件;导致整个界面完全无法触摸使用第一种情况使用触摸或者触笔操作时,如果Up事件中发生了任何异常,会导致StylusLogic.PostProcessInput的后续逻辑不会正确执行,这就包括了用于清理触控资源的 StylusTouchDevice.OnDeactivate 方法。需要注意的是:Up事件不止是TouchUp或者StylusUp,MouseUp也会引发这样的触摸失效。而在StylusTouchDevice.OnDeactivate方法中,会重置StylusLogic.CurrentMousePromotionStylusDevice属性为null或NoMousePromotionStylusDevice。此方法不执行会直接导致StylusLogic.ShouldPromoteToMouse方法对当前触控设备的判断出现错误,持续返回false,即不会再执行触控转鼠标的逻辑,出现触摸无效的现象。第二种情况如果 WPF 的 StylusUp 事件被阻断(例如e.Handled = true,或者在 StylusUp 事件中弹出一个模态窗口),则下一次触摸时获取到的点坐标将是上一次被阻断时的点坐标。于是,阻断后的第一次点击必将点中之前点的那个点,而不管现在点中了什么。如果阻断时点在新窗口外,则几乎相当于触摸失效。需要注意的是,这种情况下MouseUp的e.Handled = true是可以使用而不会导致触摸失效的。第三种情况WPF 程序在启动期间,如果触摸组件发生了异常,极有可能会使得触摸根本就没有初始化成功!比如,System.Windows.Input.StylusLogic.RegisterStylusDeviceCore(StylusDevice stylusDevice)方法在启动时抛出System.InvalidOperationException,虽然内部有catch,但实际获取到的TabletDevice个数是 0 个,根本无法获取触摸设备,于是触摸无效。或者,在WorkerOperationGetTabletsInfo.OnDoWork方法中,获取到了错误的触摸设备个数:IPimcManager pimcManager = UnsafeNativeMethods.PimcManager;uint count;pimcManager.GetTabletCount(outcount);解决之道目前为止,这三种问题都没有根本的解决办法,但是我们可以规避。第一种情况我们没有办法阻止每一处的 Up 事件,所以我的做法是在禁止那些可能会在Up中引发异常的操作监听Up事件,而是统一由我封装好的Down/Move/Up中进行分发。在我的Up中catch所有异常,随后延迟引发。try{// 分发真正业务上的 Up 事件。DeliverUpEvent(e);}catch(Exceptionex){// 使用触摸或者触笔操作时,如果 Up 事件中发生了任何异常,会导致 StylusLogic.PostProcessInput 的后续逻辑不会正确执行,// 这就包括了用于清理触控资源的 StylusTouchDevice.OnDeactivate 方法。//// 而在 StylusTouchDevice.OnDeactivate 方法中,会重置 StylusLogic.CurrentMousePromotionStylusDevice 属性// 为 null 或 NoMousePromotionStylusDevice。此方法不执行会直接导致 StylusLogic.ShouldPromoteToMouse 方法// 对当前触控设备的判断出现错误,持续返回 false,即不会再执行触控转鼠标的逻辑,出现触摸无效的现象。//// 这里通过 InvokeAsync 的方式再次抛出异常是为了在保证 Stylus 逻辑不出错的情况下,将异常暴露。Dispatcher.CurrentDispatcher.InvokeAsync(() => { ExceptionDispatchInfo.Capture(ex).Throw(); });}第二种情况一样的,我们没有办法阻止每一处的 Up 事件。于是我们只能要求多人开发项目中的每一位开发人员都注意不要在StylusUp中e.Handled = true。然而,要求每一个人都这么做是不现实的,尤其是团队成员不稳定的情况下。目前我还没有找到具体可实施的自动化的解决办法,不过我最近正在尝试的 Roslyn 扩展可能可以解决这样的问题。有关 Roslyn 扩展的开发,可以阅读我的另一篇文章:Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码。第三种情况启动时触摸设备获取错误的问题我还没有一个彻底的解决方案,目前是检测第一次机会异常,并在发现错误堆栈是以上情况的时候重新启动应用程序。能够采取这样的策略是因为此异常发生在我们的App类初始化之后MainWindow显示出来之前。

WPF如何提升三维呈现性能及优化

一、图形硬件加速wpf中的图形呈现都是通过图形卡的GPU来进行计算处理的,一般WPF 系统定义了三个呈现层:呈现层 0 无图形硬件加速。DirectX 版本级别低于 7.0;呈现层 1 部分图形硬件加速。DirectX 版本级别高于或等于 7.0 且低于 9.0。视频 RAM必须大于或等于30MB。多纹理单元单元数必须大于或等于 2(显卡AGP速率2X);呈现层 2 大多数图形功能都使用图形硬件加速。DirectX 版本级别高于或等于 9.0。视频 RAM必须大于或等于120MB。多纹理单元单元数必须大于或等于 4(显卡AGP速率4X或更高8X、16X)。二、三维模型材质的使用一般三维模型材质的使用,多数会用到Brush,但不同的Brush材质呈现的速度也不同,SolidColorBrush(直接给模型添加固有色) 、LinearGradientBrush 相对于ImageBrush、VisualBrush等运算速度要快得多,已缓存的Brush比未缓存的Brush快。三、模型的创建在三维场景中我们尽量创建GeometryModel3D三角面片小于60.000个,顶点小于20.000个,尽量重复使用外形变化不大的模型,除非有新形状需要从新创建模型,尽量在一个viewport3D中创建子模型不要创建多个viewport3D。四、关于3d抗锯齿wpf中的3d抗锯齿,只适合于vista系统,如果想在xp系统下实现抗锯齿,可以在注册表中设置最大多级采样值 HKEY_CURRENT_USER/SOFTWARE/Microsoft/Avalon.Graphics/MaxMultisampleType 值类型为DWORD一般设为4 根据显卡的性能进行合适的调整。(不过建议最好不使用这种方法,使用修改注册表可以实现抗锯齿,但同时也可能会产生新的呈现问题,比如:三维模型体贴与其他对象重叠产生图形边缘出现虚线等,不过通过设置显卡的代替像素中心功能可以解决虚线问题,但同时也会带来其他不可预知的不稳定因素)所以根据自己对三维呈现的实际展现要求可以灵活选择优化设置的方法,目的只要一个就是要保证具有稳定、优良的性能又有很好的三维呈现效果。

WPF和WCF的用途

使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。 根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了,微软将所有与此相关的技术要素都包含在内,掌握了WCF,就相当于掌握了叩开SOA大门的钥匙。 WCF是建立在.Net Framework 2.0基础之上的,正式的版本应该会作为Windows Vista的核心部分而Release。 WPFWindows Presentation Foundation Windows Presentation Foundation(以前的代号为“Avalon”)是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公开。它由显示引擎和托管代码框架组成。Windows Presentation Foundation 统一了 Windows 创建、显示和操作文档、媒体和用户界面 (UI) 的方式,使开发人员和设计人员可以创建更好的视觉效果、不同的用户体验。 Windows Presentation Foundation 发布后(计划在 2006 年),Windows XP、Windows Server 2003 和以后所有的 Windows 操作系统版本都可以使用它。 Windows Presentation Foundation Windows Presentation Foundation 由两个主要部分组成:引擎和编程框架。 Windows Presentation Foundation 引擎。Windows Presentation Foundation 引擎统一了开发人员和设计人员体验文档、媒体和 UI 的方式,为基于浏览器的体验、基于窗体的应用程序、图形、视频、音频和文档提供了一个单一的运行时库。Windows Presentation Foundation 使得应用程序不仅能够充分利用现代计算机中现有的图形硬件的全部功能,而且能够利用硬件将来的进步。例如,Windows Presentation Foundation 的基于矢量的呈现引擎使应用程序可以灵活地利用高 DPI 监视器,而无需开发人员或用户进行额外的工作。 同样,当 Windows Presentation Foundation 检测到支持硬件加速的视频卡时,它将利用硬件加速功能。

XAML与C#与WPF三者到底有什么关系?

WPF特点:程序人员与设计完全的明确的分工,美工人员您可以使用Expression Studio中套装工具可视化的设计界面。然后交给程序开发组中的XAML就可以。让程序人员直接套用到开发环境,不需要想页面怎么切了。对 与WPF最重要的特色,矢量图的超强支持 。兼容支持2D绘图,比如矩形、自定义路径,位图等。文字显示的增强,XPS和消锯齿。三维强大的支持。包括3D控件及事件,与2D及视频合并打造更立 体效果。渐变、使用高精确的(ARGP)颜色,支持浮点类型的像素坐标。这些对GDI+远远不及的。灵活、易括展的动画机制!.Net Framework 3.0类库提供了强大的基类,只需继承就可以实现自定义程序使用绘制。接口设计非常直观,完全面向对象的对象模型。使用对象描述语言XAML。使用开发工具的可视化编辑。您可以使有任何一种.Net编程语言(C#,VB NET等开发语言)进行开发。XAML主要针对界面的可视化控件描述,成生进会分析成.cs或.vb文件,并最后将编译为CLR中间运行语言。

WPF中关于样式和模板的区别

打个比方吧,,样式就是化妆,,模板就相当于整容了,,,有时候整容才能有更好的效果哈,,

WPF和WinForms有什么区别和联系?

手机和单机WinForms的区别

WPF高级编程的介绍

WPF高级编程,作者(美国)(Andrade.C.)安德拉德,由清华大学出版社。概述WPF之后,将进入WPF开发技术部分。《WPF高级编程》通过使用Visual Studio创建几个示例程序,带领您快速进入应用程序开发。此外,还将介绍XAML—— 创建用户界面的新标记语言。XAML实际上是独立于WPF的一项技术,但在WPF中广泛使用了XAML。

wpf如何截屏

截取屏幕图像方法:、 截图前,先拷贝整个屏幕图像到一个Image中,我们称之为ScreenSnapshot, 然后用户通过鼠标操作,确定一个矩形区域Rect,将Rect传递给函数BitmapSource Clip(Rect r) , Clip函数在ScreenSnapshot上截取Rect对于的那一部分图像,并返回。  WPF没有内置的函数,但可以借用WinForm的Graphics来完成,其将图像截取并保存在一个System.Drawing.Bitmap上,然后我们使用一个辅助函数将System.Drawing.Bitmap转化为WPF版本的System.Media.Imaging.BitmapSource对象就可以了public static Bitmap GetScreenSnapshot() { Rectangle rc = SystemInformation.VirtualScreen; var bitmap = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb); using (Graphics g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, CopyPixelOperation.SourceCopy); } return bitmap; } public static BitmapSource ToBitmapSource(this Bitmap bmp) { BitmapSource returnSource; try { returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } catch { returnSource = null; } return returnSource; }

学习WPF需要哪些基础知识,要学习C#吗

WPF的基础就是c#和xaml,所以是肯定要学的

WPF怎么重绘窗体

您好,请把问题描述清楚一点,以便给您更好的答复。

WPF适合作为C++程序的界面吗?相比mfc如何?

WPF可以作为VC环境的界面提供,但虽然微软号称界面和开发分离,但实际上支持最好的还是C#,C++稍有不舒服,可以忍受。WPF和MFC没法比较的,后者的优点就是无需运行库支持,一个EXE到哪都可以运行(静态编译),缺点么,MFC是从WIN95界面基础开发的,虽然后期做了很多改进,但根上还是老的,界面不好看,开发难度大。WPF如果说缺点,就是运行在.NET Framework 3.0及以上版本下,但界面功能确实强大,矢量支持、3D支持,应该说是新win环境下UI的首选。

WPF和WinForm技术有什么区别?哪个更加有前景

目前主流是Windows窗体应用程序吧,也就是WinForm。WPF是个比较新的技术,至少在国内用的人还不多,现在win8推出了,似乎WPF有进一步发展的趋势,就看微软的推广力度了。所以学WPF有一定风险,不过一旦WPF推广开来,你就已经是高手了。WIN32应用程序,比较原始,不过效率应该最高。这个学起来太麻烦了。

wpf 是不是可以取代winform了

WPF在用户体验、升级、效果的实现上比winform简单很多。长项是网页式应用编辑器类程序是难以移植到WPF,这方面winform更好用。我觉得winform属于商务型的简单的说看需不需要绚丽的效果了。开发个人应用或特效应用,使用WPF。winform在效果方面做起来很吃力。

如何在WPF应用程序中通过HttpClient调用Web API

  Asynchronous Calls  异步调用    HttpClient is designed to be non-blocking. Potentially long-running operations are implemented as asynchonrous methods, such as GetAsync and PostAsync. These methods return without waiting for the operation to complete. The previous tutorial (Calling a Web API From a Console Application) showed only blocking calls:  HttpClient被设计成是非阻塞的。潜在地,长时间运行的操作是作为异步方法实现的,例如,GetAsync和PostAsync。这些方法不会等待操作完成便会返回。上一教程(通过控制台应用程序调用Web API)只展示了阻塞调用:    HttpResponseMessage response = client.GetAsync("api/products").Result; // Blocking call(阻塞)!  This code blocks the calling thread by taking the Result property. That"s OK for a console application, but you should not do it from a UI thread, because it blocks the UI from responding to user input.  这段代码通过采用Result属性,会阻塞调用线程。对于一个控制台应用程序,这没问题,但你不应该在一个UI线程中采用这一做法,因为这会阻止UI去响应用户输入。    The asynchronous methods of HttpClient return Task objects that represent the asynchronous operation.  HttpClient的异步方法会返回表示异步操作的Task对象。    Create the WPF Project  创建WPF项目    Start Visual Studio. From the Start menu, select New Project. In the Templates pane, select Installed Templates and expand the Visual C# node. In the list of project templates, select WPF Application. Name the project and click OK.  启动Visual Studio。从“开始”菜单选择“新项目”。在“模板”面板中,选择“已安装模板”,并展开“Viusal C#”节点。在项目模板列表中,选择“WPF应用程序”。命名此项目并点击“OK”。    Open MainWindow.xaml and add the following XAML markup inside the Grid control:  打开MainWindow.xaml,并在Grid控件中添加以下XAML标记:    <StackPanel Width="250" >  <Button Name="btnGetProducts" Click="GetProducts">Get Products</Button>  <ListBox Name="ProductsList">  <ListBox.ItemTemplate>  <DataTemplate>  <StackPanel Margin="2">  <TextBlock Text="{Binding Path=Name}" />  <TextBlock >Price: $<Run Text="{Binding Path=Price}" />  (<Run Text="{Binding Path=Category}" />)</TextBlock>  </StackPanel>  </DataTemplate>  </ListBox.ItemTemplate>  </ListBox>  </StackPanel>  This markup defines a ListBox that will be data-bound to the list of products. The DataTemplate defines how each product will be displayed.  这段标记定义了一个将被数据绑定到产品列表的ListBox(列表框)。DataTemplate(数据模板)定义了如何显示每个产品。(其效果如图3-4所示)。    图3-4. WPF界面效果    Add the Model Class  添加模型类    Add the following class to the application:  将以下类添加到应用程序:    class Product  {  public string Name { get; set; }  public double Price { get; set; }  public string Category { get; set; }  }  This class defines a data object that HttpClient will write into the HTTP request body and read from the HTTP response body.  这个类定义了一个数据对象,HttpClient将把它写入HTTP请求体,也从HTTP响应体中读取它。    We"ll also add an observable class for data binding:  我们也要添加一个用于数据绑定的可见对象类(observable class):    class ProductsCollection : ObservableCollection<Product>  {  public void CopyFrom(IEnumerable<Product> products)  {  this.Items.Clear();  foreach (var p in products)  {  this.Items.Add(p);  }  this.OnCollectionChanged(  new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));  }  }  Install NuGet Package Manager  安装NuGet包管理器    NuGet Package Manager is the easiest way to add the Web API Client library to a project. If you do not have NuGet Package Manager already installed, install it as follows.  将Web API客户端库添加到项目最容易的办法是安装“NuGet包管理器(NuGet Package Manager)”。如果尚未安装NuGet包管理器,按如下步骤安装。  1.Start Visual Studio.  启动Visual Studio.  2.From the Tools menu, select Extensions and Updates.  从“工具”菜单选择“扩展与更新”  3.In the Extensions and Updates dialog, select Online.  在“扩展与更新”对话框中,选择“在线”  4.If you don"t see "NuGet Package Manager", type "nuget package manager" in the search box.  如果未看到“NuGet包管理器”,在搜索框中输入“nuget package manager”。  5.Select the NuGet Package Manager and click Download.  选择“NuGet包管理器”,并点击“下载”。  6.After the download completes, you will be prompted to install.  下载完成后,会提示你安装。  7.After the installation completes, you might be prompted to restart Visual Studio.  安装完成后,可能会提示重启Visual Studio。    上述安装过程如图3-5所示。    图3-5. 安装NuGet包管理器    Install the Web API Client Libraries  安装Web API客户端库    After NuGet Package Manager is installed, add the Web API Client Libraries package to your project.  安装NuGet包管理器后,把Web API客户端库包添加到你的项目。步骤如下:  1.From the Tools menu, select Library Package Manager. Note: If do you not see this menu item, make sure that NuGet Package Manager installed correctly.  从“工具”菜单选择“库包管理器”。注:如果看不到这个菜单项,请确保已正确安装了NuGet包管理器。  2.Select Manage NuGet Packages for Solution...  选择“管理解决方案的NuGet包…”  3.In the Manage NuGet Packages dialog, select Online.  在“管理NuGet包”对话框中,选择“在线”。  4.In the search box, type "Microsoft.AspNet.WebApi.Client".  在搜索框中输入“Microsoft.AspNet.WebApi.Client”。  5.Select the ASP.NET Web API Self Host package and click Install.  选择“ASP.NET Web API自托管包”,并点击“安装”。  6.After the package installs, click Close to close the dialog.  这个包安装后,点击“关闭”,关闭此对话框。    上述安装步骤如图3-6所示。    图3-6. 安装Web API客户端库    Initialize HttpClient  初始化HttpClient    From Solution Explorer, open the file MainWindow.xaml.cs. Add the following code.  在“解决方案资源管理器”中,打开MainWindow.xaml.cs文件。添加以下代码:    namespace WpfProductClient  {  using System;  using System.Collections.Generic;  using System.Net.Http;  using System.Net.Http.Headers;  using System.Windows;  public partial class MainWindow : Window  {  HttpClient client = new HttpClient();  ProductsCollection _products = new ProductsCollection();  public MainWindow()  {  InitializeComponent();  client.BaseAddress = new Uri("http://localhost:9000");  client.DefaultRequestHeaders.Accept.Add(  new MediaTypeWithQualityHeaderValue("application/json"));  this.ProductsList.ItemsSource = _products;  }  }  }  This code creates a new instance of HttpClient. It also sets the base URI to "http://localhost:9000/", and sets the Accept header to "application/json", which tells the server to send data in JSON format.  这段代码创建了一个新的HttpClient实例。也把基URI设置为“http://localhost:9000/”,并且把Accept报头设置为“application/json”,这是告诉服务器,以JSON格式发送数据。    Notice that we also created a new ProductsCollection class and set it as the binding for the ListBox.  注意,我们也创建了一个新的ProductsCollection类,并把它设置为对ListBox的绑定。    Getting a Resource (HTTP GET)  获取资源(HTTP GET)    If you are targeting .NET Framework 4.5, the async and await keywords make it much easier to write asynchronous code.  如果你的目标是.NET Framework 4.5(意即,你所开发的应用程序将在.NET 4.5平台上运行 — 译者注),async和await关键字会让你很容易编写异步代码。    If you are targeting .NET Framework 4.0 with Visual Studio 2012, you can install the Async Targeting Pack to get async/await support.  如果你的目标是使用Visual Studio 2012的.NET Framework 4.0,可以安装Async Targeting Pack来获得async/await支持。    The following code queries the API for a list of products. Add this code to the MainWindow class:  以下代码查询产品列表API。将此代码添加到MainWindow类:    private async void GetProducts(object sender, RoutedEventArgs e)  {  try  {  btnGetProducts.IsEnabled = false;  var response = await client.GetAsync("api/products");  response.EnsureSuccessStatusCode(); // Throw on error code(有错误码时报出异常).  var products = await response.Content.ReadAsAsync<IEnumerable<Product>>();  _products.CopyFrom(products);  }  catch (Newtonsoft.Json.JsonException jEx)  {  // This exception indicates a problem deserializing the request body.  // 这个异常指明了一个解序列化请求体的问题。  MessageBox.Show(jEx.Message);  }  catch (HttpRequestException ex)  {  MessageBox.Show(ex.Message);  }  finally  {  btnGetProducts.IsEnabled = true;  }  }  The GetAsync method sends an HTTP GET request. If the HTTP response indicates success, the response body contains a list of products in JSON format. To parse the list, call ReadAsAsync. This method reads the response body and tries to deserialize it to a specified CLR type.  GetAsync方法发送一个HTTP GET请求。如果HTTP响应指示成功,响应体会含有一个JSON格式的产品列表。要解析这个列表,调用ReadAsAsync。这个方法会读取响应体,并试图把它解序列化成一个具体的CLR类型。    As their names imply, GetAsync and ReadAsAsync are asynchronous methods, meaning they return immediately, without waiting for the operation to complete. The await keyword suspends execution until the operation completes. For example:  正如其名称所暗示的,GetAsync和ReadAsAsync是异步方法,意即,它们立即返回,不会等待操作完成。await关键字会挂起执行,直到操作完成。例如:    var response = await client.GetAsync("api/products");  The code that appears after this statement does not execute until the HTTP request is completed. But that does not mean the event handler blocks, waiting for GetAsync to complete. Just the opposite — control returns to the caller. When the HTTP request is completed, execution continues from the point where it was suspended.  出现在这条语句之后的代码直到HTTP请求完成时才会执行。但这并不意味着事件处理器(event handler,也可以叫做事件处理程序 — 译者注)会阻塞,以等待GetAsync完成。恰恰相反 — 控制会返回给调用者。当HTTP请求完成时,执行会从挂起点继续。    If a method uses await, it must have the async modifier:  如果一个方法使用await,它必须有async修饰符:    private async void GetProducts(object sender, RoutedEventArgs e)  Without the await keyword, you would need to call ContinueWith on the Task object:  没有这个await关键字,你就需要调用Task对象上的ContinueWith:    private void GetProducts(object sender, RoutedEventArgs e)  {  btnGetProducts.IsEnabled = false;  client.GetAsync("api/products/2").ContinueWith((t) =>  {  if (t.IsFaulted)  {  MessageBox.Show(t.Exception.Message);  btnGetProducts.IsEnabled = true;  }  else  {  var response = t.Result;  if (response.IsSuccessStatusCode)  {  response.Content.ReadAsAsync<IEnumerable<Product>>().  ContinueWith(t2 =>  {  if (t2.IsFaulted)  {  MessageBox.Show(t2.Exception.Message);  btnGetProducts.IsEnabled = true;  }  else  {  var products = t2.Result;  _products.CopyFrom(products);  btnGetProducts.IsEnabled = true;  }  }, TaskScheduler.FromCurrentSynchronizationContext());  }  }  }, TaskScheduler.FromCurrentSynchronizationContext());  }  This type of code is difficult to get right, so it"s recommended to target .NET 4.5, or if that"s not possible, install the Async Targeting Pack.  这种型式的代码难以正确,因此建议把目标定为.NET 4.5,或者,如果这不可能,需安装Async Targeting Pack(Async目标包)。

wpf中怎么查找控件啊

FrameworkElement.FindName 方法查找具有提供的标识符名称(x:name)的元素。

如何制作简单的WPF时钟

1、首先在Expression Blend中画出时钟的样式;2、建立时钟的程序辅助类;3、将此时钟样式需要动态换掉的部分改成相应的绑定值。由于具体步骤很多,这里只说说技术难点和要点,着重说明上述第2点部分。// 时钟控件类:Clock.csusing System;using System.Windows;using System.Windows.Controls;using System.Windows.Controls.Primitives;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using System.Timers;using System.Windows.Threading;namespace BrawDraw.Com.WPF.Clock.ControlLibrary{/// <summary>Clock Control/// </summary>public class Clock : Control{private DispatcherTimer timer;static Clock(){DefaultStyleKeyProperty.OverrideMetadata(typeof(Clock), new FrameworkPropertyMetadata(typeof(Clock)));}protected override void OnInitialized(EventArgs e){base.OnInitialized(e);timer = new DispatcherTimer();timer.Tick += new EventHandler(Timer_Tick);timer.Start();}private void Timer_Tick(object sender, EventArgs e){UpdateDateTime();timer.Interval = TimeSpan.FromMilliseconds(1000 - DateTime.Now.Millisecond);}private void UpdateDateTime(){this.DateTime = System.DateTime.Now;}#region DateTime propertypublic DateTime DateTime{get{return (DateTime)GetValue(DateTimeProperty);}private set{SetValue(DateTimeProperty, value);}}public static DependencyProperty DateTimeProperty = DependencyProperty.Register("DateTime",typeof(DateTime),typeof(Clock),new PropertyMetadata(DateTime.Now, new PropertyChangedCallback(OnDateTimeInvalidated)));public static readonly RoutedEvent DateTimeChangedEvent =EventManager.RegisterRoutedEvent("DateTimeChanged", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler<DateTime>), typeof(Clock));protected virtual void OnDateTimeChanged(DateTime oldValue, DateTime newValue){RoutedPropertyChangedEventArgs<DateTime> args = new RoutedPropertyChangedEventArgs<DateTime>(oldValue, newValue);args.RoutedEvent = Clock.DateTimeChangedEvent;RaiseEvent(args);}private static void OnDateTimeInvalidated(DependencyObject d, DependencyPropertyChangedEventArgs e){Clock clock = (Clock)d;DateTime oldValue = (DateTime)e.OldValue;DateTime newValue = (DateTime)e.NewValue;clock.OnDateTimeChanged(oldValue, newValue);}#endregion}}// 时钟内部时针、分针、秒针角度计算及星期显示的类: ClockConverters.cs// 由于WPF中旋转角度是以度单位,计算为绕一个圆周时,为360度。所以,计算时以360度来计算。using System;using System.Globalization;using System.Windows.Data;namespace BrawDraw.Com.WPF.Clock{// 一分钟60秒,一周为360度,所以,一秒钟就占6度,所以是:秒数×6。[ValueConversion(typeof(DateTime), typeof(int))]public class SecondsConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){DateTime date = (DateTime)value;return date.Second * 6;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return null;}}// 一小时是60分钟,一周为360度,所以,一分钟就占6度,所以是:分钟数×6。[ValueConversion(typeof(DateTime), typeof(int))]public class MinutesConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){DateTime date = (DateTime)value;return date.Minute * 6;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return null;}}// 时钟上显示12小时,一周为360度,这样,每小时占30度,考虑分钟所占角度是分钟数/2,所以结果是:小时数×30 + 分钟数/2。[ValueConversion(typeof(DateTime), typeof(int))]public class HoursConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){DateTime date = (DateTime)value;return (date.Hour * 30) + (date.Minute / 2);}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return null;}}[ValueConversion(typeof(DateTime), typeof(string))]public class WeekdayConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){DateTime date = (DateTime)value;return date.DayOfWeek.ToString().Substring(0,3);}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return null;}}}

如何让wpf 中的textbox只能输入整型或浮点型呢??

加正则验证吧

在wpf中怎么使用cookie-CSDN论坛

Application Cookie 临时的,当程序退出时无效Cookie。

WPF和WinForm技术有什么区别?哪个更加有前景

从程序上讲,都以事件的形式调用处理。winform开发上比WPF稍容易点,但整体上说其实没多大区别。WPF基于directX,所以对于3D的处理更好,画面也更加酷炫。winform的画面设计采用与开发语言相同的语言实现,并保存在相同的代码类型文件中,移植性不好。WPF的画面采用XML形式书写,保存在xml中,移植性更好,也更直观易懂。另有一点细微差别,就是winform的控件可以叠放,如两个button的坐标可以完全一样,只能看到上面的一个。而WPF的控件不能叠放,所以如果有两个button位置相同,你必须要隐藏一个,否则两个都会被看到。

WPF是一种编程语言吗?和C#有什么区别?

WPF是一种框架,建立在.net之上,是Windows的下一代图形子系统,在表面上看是用来替代WinForm他的地位和ASP.NET相似,都可以使用C#来编写

有人说WPF比winform强大很多为什么都不转

wpf虽然强大,但吃内存,同时很多地方还不够成熟!!用的人也比较少!!

wpf怎么使用第三方库

For Example:引用MaterialDesign库(辅助界面设计的开源库)Nuget:搜索MaterialDesign关键字,下载MaterialDesignThemes在App.xaml 引入MD常用资源方便所有界面调用(不是所有第三方库都需要)<Application x:Class="WpfApp2.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp2" StartupUri="MainWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!--MD--> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" /> <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources></Application>界面调用先加载命名空间 xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"使用<Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp2" xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Button Style="{StaticResource MaterialDesignFloatingActionMiniButton}" HorizontalAlignment="Left" ToolTip="MaterialDesignFloatingActionMiniButton"> <md:PackIcon Kind="Alarm" Height="20" Width="20" /> </Button> </Grid></Window>

WPF是一种编程语言吗?和C#有什么区别?

WPF是一种框架,建立在.net之上,是Windows的下一代图形子系统,在表面上看是用来替代WinForm他的地位和ASP.NET相似,都可以使用C#来编写

c# WPF的DrawingVisual类

public class DrawingHost : FrameworkElement { private DrawingVisual _drawingVisual = new DrawingVisual(); public DrawingHost() { // 必须加入到VisualTree中才能显示 this.AddVisualChild(_drawingVisual); this.Draw(); } // 重载自己的VisualTree的孩子的个数,由于只有一个DrawingVisual,返回1 protected override int VisualChildrenCount { get { return 1; } } // 重载当WPF框架向自己要孩子的时候,返回返回DrawingVisual protected override Visual GetVisualChild(int index) { if (index == 0) return _drawingVisual; throw new IndexOutOfRangeException(); } // 绘制代码 private void Draw() { var dc = _drawingVisual.RenderOpen(); dc.DrawEllipse(Brushes.Blue, null, new Point(50, 50), 50, 50); dc.Close(); } }

wpf有没有numberbox

没有,只能自己画

winform和wpf哪个先出哪个后出?

winform已经停止更新了。现在应该关注wpfwinform先,wpf后

WPF和WCF的用途

...

冰箱温控器wdf和wpf有什么区别

WDF是用于冰箱的,WPF是用于冰柜。温度器后边标志有数字来表示可调温度的档位。WDF产品具有自动化霜功能,,适用于双门直冷式电冰箱,各种冷冻,冷藏箱及饮水机作控温元件。WPF产品可用于冰柜,冷藏箱,饮水机,双温双控直冷式电冰箱,风冷式冰柜等作控温元件。电冰箱温控器设置在0档处时,冰箱就会停止工作,这主要是用来进行人工的化霜,等到冰箱化霜完毕之后将电冰箱的温控器转会原位,冰箱就又能正常开始工作。扩展资料:温控器工作原理:通过温度传感器对环境温度自动进行采样、即时监控,当环境温度高于控制设定值时控制电路启动,可以设置控制回差。如温度还在升,当升到设定的超限报警温度点时,启动超限报警功能。当被控制的温度不能得到有效的控制时,为了防止设备的毁坏还可以通过跳闸的功能来停止设备继续运行。主要应用于电力部门使用的各种高低压开关柜、干式变压器、箱式变电站及其他相关的温度使用领域。参考资料来源:百度百科-冰箱温控器参考资料来源:百度百科-温控器

如何将wpf窗体最小化

private void Button_Click(object sender, RoutedEventArgs e) { this.WindowState = WindowState.Minimized;}

winform与WPF有什么区别

WPF是数据驱动界面,而且界面相对于winform来说更好美化。

Winform和WPF的区别和WPF具体用法

a

WPF做界面开发有哪些优点与缺点

优点很多着重讲讲我做开发几年发现的缺点优点:类库多,上手快,利于快速开发。缺点:1.对微软的操作系统,对微软类库的依赖性极强到了非微软的操作系统上,很多framework里面的类库就不好使了。前几天遇到个客户,告诉我他的c盘容量满了,装不下.netframework然后我就直接崩溃了2.技术更新速度快跟微软,你就得面对这样的问题。举个例子:webservice出来之后,微软就提出安全性较高的wse,wse之后微软又马上提出集remotingwebservicewse等大成的wcf。silverlight出来还是挺热的,不过最近又谣言四起说微软在不久之后又会停止发展这项技术。这速度---你如何受得了3.移动和硬件领域的乏力c/c++/java在移动领域和硬件领域的开发优势,是不用多说的----你见过几个公司,选择用c#来开发移动系统或者硬件驱动的?

WPF 是什么意思?(C#)

WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。WPF 为Windows Presentation Foundation的首字母缩写 ,中文译为“Windows呈现基础”,其原来代号为“Avalon”,因与“我佩服”拼音首字母组合一样,国内有人调侃地称之为“我佩服”。由 .NET Framework 3.0 开始引入,与 Windows Communication Foundation及 Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。扩展资料:国内即时通讯领导商腾讯Tencent曾经发布过一款基于WPF的QQ 概念版(QQ 概念版:QQ 概念版是腾讯首款NUI(自然用户交互)产品,全面实现了多点触摸操作。在实现IM的基础功能外,QQ概念版还推出了动感相框、动态背景、多Tab聊天窗口、3D交互、矢量界面、桌面好友等一系列新功能、新体验以及Windows7的重要新特性。参考资料来源:百度百科-WPF参考资料来源:百度百科-界面设计
 1 2 3  下一页  尾页