没有仔细研究, 以下是个人主观看法,存在些"想当然", 仅供参考.
首先wpf是依赖于.net framework的, 也就是说xp\win7\win8\Win10, 都是可以跑起来的.并且发布路径不受限制, 就像目前常见的桌面软件一样, 只要下载个安装包安装即可使用. 而UWP好像只能在w8\Win10以及Windows mobile系统上使用, 而且唯一的发布路径就是Windows商店.
其次从风格来看, wpf虽然是流式布局,但更多是为桌面客户端(pc客户端)设计的, 而UWP是移动为先,兼顾PC客户端的.
综上就目前而言, wpf更加偏向于或者更适合于企业级应用或者说面向企业的商业软件而UWP偏向于面向个人消费者的应用软件.
另外我感觉wpf\UWP, 甚至html5这些"界面技术"其实是相通的,非常相似. wpf和UWP甚至很近似, 掌握了其中一个的话再学习另一个非常容易.
1、图中是winform应用, 实现的win7毛玻璃的特效, 参考:
http://blog.csdn.net/cheongyuhin/article/details/5857149
2、WPF实现起来更简单,因为wpf天生对透明、遮罩这些效果支持的非常好。
添加一个类:AeroGlass.cs
using Systemusing System.Runtime.InteropServices
using System.Windows
using System.Windows.Interop
using System.Windows.Media
[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
public MARGINS(Thickness t)
{
Left = (int)t.Left
Right = (int)t.Right
Top = (int)t.Top
Bottom = (int)t.Bottom
}
public int Left
public int Right
public int Top
public int Bottom
}
public class GlassHelper
{
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(
IntPtr hWnd, ref MARGINS pMarInset)
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled()
public static bool ExtendGlassFrame(Window window, Thickness margin)
{
if (!DwmIsCompositionEnabled())
return false
IntPtr hwnd = new WindowInteropHelper(window).Handle
if (hwnd == IntPtr.Zero)
throw new InvalidOperationException(
"The Window must be shown before extending glass.")
// Set the background to transparent from both the WPF and Win32 perspectives
window.Background = Brushes.Transparent
HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent
MARGINS margins = new MARGINS(margin)
DwmExtendFrameIntoClientArea(hwnd, ref margins)
return true
}
}
然后在wpf窗体添加代码:
protected override void OnSourceInitialized(EventArgs e){
base.OnSourceInitialized(e)
GlassHelper.ExtendGlassFrame(this, new Thickness(-1))
}
这种毛玻璃特效是需要继承自系统风格的, 所以必须在win7电脑里,才会出现你要的那种效果, 在win10、win8都没有用的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)