文章目录
Custom Window Chrome and Styles
最近有点忙,先把文章记在这里,尽快补充上来
这一节主要实现自定义边框窗口,程序界面整体主题(字体,颜色)等
1.WindowChrome
这是一个无边框简单样式控件,主要是弥补了,默认window窗口样式固定的不足,可扩展性高,
要使用这个WindowChrome,必须要注意几点:
- WindowStyle=“None”
- AllowsTransparency=“True”
- <WindowChrome.WindowChrome> 这个节点需要在window的content之前增加,需要它帮助窗口头部移动
- 放大缩小需要实现,这里还实现了双击来回放大缩小,这部分建议认真看下,实现方式与平时所见大不一样
2.WindowViewModel
这个实例化时需要传入当前窗口实例对象,这个构造有好有不好,
- 好的地方时,我们在需要的时候可以访问窗口对象,比如之后有一段是获取密码框密码的,就是这样实现
- 不好的地方是,这个其实没有做到前后分离,硬生生的把前端对象暴露出来,危险,而且在线程上容易出现错误,个人是不建议这样使用的,使用banding的方式还是好一点
3.WindowResizer
这个部分相信第一次看的朋友基本上有点discomfort,用了较多的win32底层api,不建议刻意的去记忆,这一部分听懂他的代码思路就可以。
- static extern bool GetCursorPos(out POINT lpPoint);
- static extern bool GetMonitorInfo(IntPtr hMonitor, MONITORINFO lpmi);
- static extern IntPtr MonitorFromPoint(POINT pt, MonitorOptions dwFlags);
- static extern IntPtr MonitorFromWindow(IntPtr hwnd, MonitorOptions dwFlags);
主要是获取了鼠标位置,窗口位置,移动距离等实现,逻辑是挺清晰的,只是写法会相对的不习惯。
4.ResourceDictionary
这个是加入style样式字典的容器,一定要注意引入的顺序,要把基础的颜色,字体等放在前面,引用其他的需要往后放置
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Order is important-->
<ResourceDictionary Source="Styles/Colors.xaml"/>
<ResourceDictionary Source="Styles/Fonts.xaml"/>
<ResourceDictionary Source="Styles/Buttons.xaml"/>
<ResourceDictionary Source="Styles/Texts.xaml"/>
<ResourceDictionary Source="Styles/Windows.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
5.个人总结
这节重点学习如何写 “Style” 还有 它的对象"TargetType",这个类似前端的css样式一样
<Style TargetType="{x:Type local:MainWindow}">
<Setter Property="Template">
<Setter.Value>
</Setter.Value>
</Setter>
</Style>
6.视频链接
链接:https://pan.baidu.com/s/1_g-HIA9ze1V3fxIP2VR2Cw
提取码:5yoj
last modified:2018年9月30日16:35:45(1)