不管是CS还是BS,在需要用户提交数据的页面上,总是要做一些校验,如果校验有错就要给用户提示,WPF里自然也避免不了这个问题。一开始,我是在窗口上预留了一个TextBlock,并且设置其Visibility=Collapsed,当校验有错的时候,再把这个TextBlock显示出来,这样做是可以实现既定需求,但是这样却会影响整个窗口的布局,以下图举个例子:
现在这个TextBlock隐藏在输入框和搜索按钮之间,大家知道Visibility=Collapsed是不占布局的,一旦我将Visibility设成了Visible,搜索按钮将会往下移动,这样的体验显然不好;有的同学要说了,那初始时设置Visibility=Hidden好了,这个是占布局的,这样按钮不会下移,的确,按钮是不会下移了,但是这里莫名其妙空白一块也是影响美观的吧。
我们平时见多了APP中或者H5中的页面中央一块黑色背景的提示,这种体验还是比较好的,那在WPF里也实现一个吧~
思路很简单,在每个窗口布局里最外层Grid里与内容快平级放置一个上下左右都居中的框就可以了,然后依照实际情况控制这个框的Visibility属性。显然,这样会有不少的工作量,尤其是项目里窗口比较多的时候。再想想,对,我们要搞一个窗口模板,让有需要的窗口使用这个模板就行了。
新建一个资源字典VcreditWindowWithAlert.xaml,代码如下:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ControlTemplate x:Key="CustomAlertWindowTemplete" TargetType="Window">
<Border BorderBrush="Transparent" BorderThickness="12" x:Name="outBorder">
<Border.Effect>
<DropShadowEffect BlurRadius="15