积极答复者
一个问题一周了没有人解答,求解答啊,关于将windowstyle改为none的问题

问题
答案
-
我之前也做过一些自定义样式的窗口的程序, 但没有涉及过你所说的问题, 在这里谈谈我的想法.
没有现成的代码, 但是如果我要实现这样的效果的话, 就会自己写动画来实现.
需要做的:
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等属性呈现原窗口.
总的来说, 上述方案都是通过延迟窗口的最小化/最大化/还原过程, 在这段时延中添加过渡效果, 来达到美观的目的.
上述方案只是思路, 并没有通过实践验证可行性, 不保证完全没有问题!!!
- 已建议为答案 Leo (Apple) YangModerator 2014年11月20日 1:54
- 已标记为答案 Leo (Apple) YangModerator 2014年11月21日 5:10
全部回复
-
我之前也做过一些自定义样式的窗口的程序, 但没有涉及过你所说的问题, 在这里谈谈我的想法.
没有现成的代码, 但是如果我要实现这样的效果的话, 就会自己写动画来实现.
需要做的:
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等属性呈现原窗口.
总的来说, 上述方案都是通过延迟窗口的最小化/最大化/还原过程, 在这段时延中添加过渡效果, 来达到美观的目的.
上述方案只是思路, 并没有通过实践验证可行性, 不保证完全没有问题!!!
- 已建议为答案 Leo (Apple) YangModerator 2014年11月20日 1:54
- 已标记为答案 Leo (Apple) YangModerator 2014年11月21日 5:10