wpf如何在win8和xp系统下面实现玻璃窗体效果

luo7269315 2013-12-23 10:01:59
求代码,,,已经加班一个周末了。
网上的找来找去都是win7下的,,,

/// <summary>
/// 获取系统信息
/// </summary>
/// <returns></returns>
public string GetOSVersion()
{
//获取系统信息
OperatingSystem osinfo = Environment.OSVersion;
//获取操作系统ID
PlatformID platformID = osinfo.Platform;
//获取主版本号
int versionMajor = osinfo.Version.Major;
//获取副主版号
int versionManor = osinfo.Version.Minor;
if ((platformID == PlatformID.Win32NT) && (versionMajor == 5) && (versionManor == 1))
return "XP";
if ((platformID == PlatformID.Win32NT) && (versionMajor == 5) && (versionManor == 2))
return "2003";
if ((platformID == PlatformID.Win32NT) && (versionMajor == 6) && (versionManor == 0))
return "Vista";
if ((platformID == PlatformID.Win32NT) && (versionMajor == 6) && (versionManor == 1))
return "Win7";
if ((platformID == PlatformID.Win32NT) && (versionMajor == 6) && (versionManor == 2))
return "Win8";
return "QT";
}

接下去 就不知道怎么写了 win8和xp的找不到实现方法!求实现代码
...全文
395 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xugan666 2013-12-25
  • 打赏
  • 举报
回复
其实我想说win7和win8实现的效果是一样的。。。另外你说到xp。。。我想说的是xp本身就没有那个透明的那个效果。。。因为程序版本的原因。。还有就是。。特效的原因。。。
小猪八Q 2013-12-25
  • 打赏
  • 举报
回复
引用 8 楼 luo7269315 的回复:
[quote=引用 7 楼 KumaPower 的回复:] 哦~我以为你是控件,我上面那个是使控件外观变成win7那样,不是窗口
以前做web的,刚刚开始wpf呢 你就是大牛啊!!很多都不懂呢!win8不是用Aero的,还在找,,啊啊啊!!![/quote] http://aura.codeplex.com/看看这个可不可以解决你的问题
Bonjour-你好 2013-12-23
  • 打赏
  • 举报
回复
我的理解是win7默认就是用Aero的,不知你是“怎样实现的”。。。。。。

我这里没有win8,所以就只能测试win7:

1、添加“PresentationFramework.Aero”引用,并把“复制本地”设置为 True




2、在App.xaml中添加 ResourceDictionary:
<Application x:Class="Win7_AeroTheme.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
</Application.Resources>
</Application>


运行效果区别:
luo7269315 2013-12-23
  • 打赏
  • 举报
回复
引用 1 楼 KumaPower 的回复:
你的意思是在win8和xp上运行时,wpf呈现的效果是win7那种效果?
是的 win7已经实现了。用的是Aero,但是win8和xp没有,,,
Bonjour-你好 2013-12-23
  • 打赏
  • 举报
回复
你的意思是在win8和xp上运行时,wpf呈现的效果是win7那种效果?
Bonjour-你好 2013-12-23
  • 打赏
  • 举报
回复
我也很羡慕会做web的,我接触wpf也就是1年多。不要看我分数多就以为是“牛”啊,其实都是浮云~
luo7269315 2013-12-23
  • 打赏
  • 举报
回复
引用 7 楼 KumaPower 的回复:
哦~我以为你是控件,我上面那个是使控件外观变成win7那样,不是窗口
以前做web的,刚刚开始wpf呢 你就是大牛啊!!很多都不懂呢!win8不是用Aero的,还在找,,啊啊啊!!!
Bonjour-你好 2013-12-23
  • 打赏
  • 举报
回复
哦~我以为你是控件,我上面那个是使控件外观变成win7那样,不是窗口
luo7269315 2013-12-23
  • 打赏
  • 举报
回复
引用 5 楼 KumaPower 的回复:
你这个玻璃效果是:只是窗口?只是控件?两者皆是?
只有窗口,按钮貌似没有呢,,,
Bonjour-你好 2013-12-23
  • 打赏
  • 举报
回复
你这个玻璃效果是:只是窗口?只是控件?两者皆是?
luo7269315 2013-12-23
  • 打赏
  • 举报
回复
引用 3 楼 KumaPower 的回复:
我的理解是win7默认就是用Aero的,不知你是“怎样实现的”。。。。。。 我这里没有win8,所以就只能测试win7:
测试过了,xp下实没有玻璃效果的dll,要加个DwmApi.dll到system32里, 代码

private void ExtendAeroGlass(Window window)
        {
            try
            {
                // 为WPF程序获取窗口句柄 
                IntPtr mainWindowPtr = new WindowInteropHelper(window).Handle;
                HwndSource mainWindowSrc = HwndSource.FromHwnd(mainWindowPtr);
                mainWindowSrc.CompositionTarget.BackgroundColor = Colors.Transparent;

                // 设置Margins 
                MARGINS margins = new MARGINS();

                // 扩展Aero Glass 
                margins.cxLeftWidth = -1;
                margins.cxRightWidth = -1;
                margins.cyTopHeight = -1;
                margins.cyBottomHeight = -1;

                int hr = DwmExtendFrameIntoClientArea(mainWindowSrc.Handle, ref margins);
                if (hr < 0)
                {
                    System.Windows.MessageBox.Show("DwmExtendFrameIntoClientArea Failed");
                }
            }
            catch (DllNotFoundException)
            {
                System.Windows.Application.Current.MainWindow.Background = Brushes.White;
            }
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct MARGINS
        {
            public int cxLeftWidth;
            public int cxRightWidth;
            public int cyTopHeight;
            public int cyBottomHeight;
        };
   
   [DllImport("DwmApi.dll")] 
   public static extern int DwmExtendFrameIntoClientArea( IntPtr hwnd, ref MARGINS pMarInset);
这是xp下实现,现在差win8了,,,

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧