认知尚浅,如有错误,愿闻其详!
概述
在实现便签项目时,为了实现美观,需要将Windows窗口样式去除掉,实现无边框、背景透明等样式。如图:

其中,有一些坑,记录一下,本文涉及依赖属性,如不了解,点这里!
窗口无边框化
前端需要使用到WindowChrome类来自定义窗口风格,需要在XAML中引入shell命名空间,然后进行属性设置:
ResizeBorderThickness:调整窗口大小的边框,不可视边框
CaptionHeight:标题栏高度
CornerRadius:窗口四边圆角度
GlassFrameThickness:窗口边框大小,可视的边框
xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework"
<shell:WindowChrome.WindowChrome>
<shell:WindowChrome
ResizeBorderThickness="2"
CaptionHeight="0"
CornerRadius="0"
GlassFrameThickness="0"
/>
</shell:WindowChrome.WindowChrome>
窗口透明
要实现窗口透明度调节,需要给窗口赋值允许透明属性:AllowsTransparency ="True"
,
否则调节Opacity时背景只会变黑,而不是透明。
且赋值上个属性的同时也需要赋值窗口样式为none属性:WindowStyle="None"
,
否则会抛异常。
最后,是设置透明度值,它需要单独的在<Window.Background>
下修改SolidColorBrush
中的Opacity的属性值,来改变透明度<SolidColorBrush Opacity="{Binding ElementName=stickyNoteViewProp, Path=backgroundOpacity}" />
这样才能够完美的解决透明问题,否则如果在窗口下直接设置Opacity属性的值则会导致窗口中的控件也随之变透明,这并不是我想要的。
<Window.Background>
<SolidColorBrush Opacity="{Binding ElementName=stickyNoteViewProp, Path=backgroundOpacity}" Color="{Binding ElementName=stickyNoteViewProp, Path=viewBackground}"></SolidColorBrush>
</Window.Background>
网友评论