none
一个问题一周了没有人解答,求解答啊,关于将windowstyle改为none的问题 RRS feed

  • 问题

  • 具体问题是点击任务栏的图标,从最小化变最大化,界面会直接弹出,但是由于界面没有采用windows的框架即windowsytle = none,界面重绘,在弹出的过程中会附带色彩的闪烁,感觉很不美观,希望可以做成那种微软框架默认的渐变形式,如果有代码最好,希望可以帮助我!
    2014年11月14日 10:26

答案

  • 我之前也做过一些自定义样式的窗口的程序, 但没有涉及过你所说的问题, 在这里谈谈我的想法.

    没有现成的代码, 但是如果我要实现这样的效果的话, 就会自己写动画来实现.

    需要做的:

    1.响应Window.StateChanged事件, 开始进行窗口状态的处理.

    2.手动控制窗口的Opacity, 实现透明度的渐变, 避开加载过程的视觉问题.

    3.设计动画, 实现窗口从下方弹出到目标位置, 以及逆过程.

    4.为窗口创建两个子级容器:SimWindow用于承载原有窗口中的所有内容, Anim用于承载最大化/最小化/还原的动画.

    最小化过程:

    1.点击最小化按钮(指的是窗口中自定义的按钮, 对于任务栏按钮则暂时没有办法), 开始执行最小化过程

    2.控制SimWindow的透明度, 使窗口在视觉上进入消失过程

    3.开始Anim中的动画, 表现为一个矩形在缩小渐隐并向下移动.

    4.动画执行完毕, 设置WindowState为Minimized.

    最大化/还原过程:

    1.当窗口被弹出, 检测到Window.StateChanged事件, 开始执行最大化/还原过程

    2.开始Anim中的动画

    3.控制SimWindow中的透明度.

    这种方法的问题在于, 最大化最小化的动画是全屏范围的, 而承载它的容器Anim则是从属于窗口的, 我不确定如果把窗口的ClipToBounds设置为False的话能不能让其元素超出窗口边界, 如果不行的话, 那上述动画则不能完全展现想要的效果.

    如果只是为了消除加载过程的美观问题, 那可以舍弃掉上述的动画, 仅通过控制窗口的透明度来实现避开加载过程的目的; 也可以在窗口最小化的时候获取窗口的截图, 把它放在窗口最上方作为遮盖, 当窗口还原时, 看到的就是窗口最小化之前的截图, 等窗口加载完了之后, 再设置遮盖图片的Visibility等属性呈现原窗口.

    总的来说, 上述方案都是通过延迟窗口的最小化/最大化/还原过程, 在这段时延中添加过渡效果, 来达到美观的目的.

    上述方案只是思路, 并没有通过实践验证可行性, 不保证完全没有问题!!!

    2014年11月19日 8:11

全部回复

  • 你要什么样的渐变样式,可以自己设计呀!
    2014年11月17日 8:32
  • 我之前也做过一些自定义样式的窗口的程序, 但没有涉及过你所说的问题, 在这里谈谈我的想法.

    没有现成的代码, 但是如果我要实现这样的效果的话, 就会自己写动画来实现.

    需要做的:

    1.响应Window.StateChanged事件, 开始进行窗口状态的处理.

    2.手动控制窗口的Opacity, 实现透明度的渐变, 避开加载过程的视觉问题.

    3.设计动画, 实现窗口从下方弹出到目标位置, 以及逆过程.

    4.为窗口创建两个子级容器:SimWindow用于承载原有窗口中的所有内容, Anim用于承载最大化/最小化/还原的动画.

    最小化过程:

    1.点击最小化按钮(指的是窗口中自定义的按钮, 对于任务栏按钮则暂时没有办法), 开始执行最小化过程

    2.控制SimWindow的透明度, 使窗口在视觉上进入消失过程

    3.开始Anim中的动画, 表现为一个矩形在缩小渐隐并向下移动.

    4.动画执行完毕, 设置WindowState为Minimized.

    最大化/还原过程:

    1.当窗口被弹出, 检测到Window.StateChanged事件, 开始执行最大化/还原过程

    2.开始Anim中的动画

    3.控制SimWindow中的透明度.

    这种方法的问题在于, 最大化最小化的动画是全屏范围的, 而承载它的容器Anim则是从属于窗口的, 我不确定如果把窗口的ClipToBounds设置为False的话能不能让其元素超出窗口边界, 如果不行的话, 那上述动画则不能完全展现想要的效果.

    如果只是为了消除加载过程的美观问题, 那可以舍弃掉上述的动画, 仅通过控制窗口的透明度来实现避开加载过程的目的; 也可以在窗口最小化的时候获取窗口的截图, 把它放在窗口最上方作为遮盖, 当窗口还原时, 看到的就是窗口最小化之前的截图, 等窗口加载完了之后, 再设置遮盖图片的Visibility等属性呈现原窗口.

    总的来说, 上述方案都是通过延迟窗口的最小化/最大化/还原过程, 在这段时延中添加过渡效果, 来达到美观的目的.

    上述方案只是思路, 并没有通过实践验证可行性, 不保证完全没有问题!!!

    2014年11月19日 8:11